| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3229 人关注过本帖
标题:深入指针笔记二
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用Devil_W在2012-7-28 12:14:54的发言:

 
 
这就是你的结论?
 
char *p = "How are you"  编译器应该会强制转换成const char * p = "How are u"
哦?这样啊。
那么一个const变量会不会也是个临时变量呢?
或者说
一个临时变量会不会也是个const变量呢?

梅尚程荀
马谭杨奚







                                                       
2012-07-28 12:21
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用有容就大在2012-7-28 12:21:23的发言:

哦?这样啊。
那么一个const变量会不会也是个临时变量呢?
或者说
一个临时变量会不会也是个const变量呢?



何为 临时变量?
2012-07-28 12:27
信箱有效
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1102
专家分:4268
注 册:2012-6-19
收藏
得分:0 
char *p="How are you
一般在编译时就已经确定了,所在的位置是不可写的常量段
2012-07-28 12:30
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 9楼 有容就大
不是静态存储区

总有那身价贱的人给作业贴回复完整的代码
2012-07-28 12:31
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用Devil_W在2012-7-28 12:27:17的发言:

 
 
 
何为 临时变量?
可能我的理解比较混乱 我的意思是生存周期比较短的那些变量 应该和局部变量差不多
比如
程序代码:
#include <stdio.h>

int main(void)
{
    int i = 1;
   
    return 0;
}
当这个程序结束时 变量i分配的内存就被释放了,我称它为局部或者临时变量 不知可以吗?

梅尚程荀
马谭杨奚







                                                       
2012-07-28 12:35
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用embed_xuel在2012-7-28 12:31:23的发言:

不是静态存储区
那char *p = "How are you"; 的 "How are you" 存在那里?

梅尚程荀
马谭杨奚







                                                       
2012-07-28 12:36
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
http://www.
2012-07-28 12:44
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 16楼 有容就大
常量区

总有那身价贱的人给作业贴回复完整的代码
2012-07-28 12:45
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


1、栈区(stack)―   由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap) ―   一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

3、全局区(静态区)(static)―,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放

4、文字常量区  ―常量字符串就是放在这里的。 程序结束后由系统释放

5、程序代码区―存放函数体的二进制代码。

示例程序:
//main.cpp

int a = 0; 全局初始化区

char *p1; 全局未初始化区

main()

{

int b; 栈

char s[] = "abc"; 栈

char *p2; 栈

char *p3 = "123456"; 123456\0在常量区,p3在栈上。

static int c =0; 全局(静态)初始化区

p1 = (char *)malloc(10);

p2 = (char *)malloc(20);

分配得来得10和20字节的区域就在堆区。

strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。

}
2012-07-28 12:46
LShang
Rank: 4
来 自:China
等 级:业余侠客
威 望:3
帖 子:183
专家分:258
注 册:2010-12-24
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *p;
    p = (char *)malloc(sizeof(char) * 2);
    if (p != NULL)
    {
        *p = 'a';
        *(p+1) = '\0';
        printf("%s",p);
        free(p);
    }

    return 0;
}

堆里的内容是由程序员申请和释放的,是可以更改的

学如逆水行舟,不进则退
士不可以不弘毅,任重而道远
2012-07-28 12:49
快速回复:深入指针笔记二
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041299 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved