为什么value的值是一样的呢?求解释的清楚一些,很是疑惑。
#include <stdio.h>
int main(void)
{
const char * mesg = "Don't be a fool!";
const char * copy;
copy = mesg;
printf("%s\n", copy);
printf("mesg = %s; &mesg = %p; value = %p\n",
mesg, &mesg, mesg);
printf("copy = %s; © = %p; value = %p\n",
copy, ©, copy);
return 0;
}
为什么value的只是一样的呢?求解释的清楚一些,很是疑惑。
[解决办法]
首先看下C/C++的变量分布:
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
存储空间类型: 栈(stack):自动分配和清除的变量.如:局部变量和函数参数等
堆(heap):由malloc等函数分配的空间.
(在c++里这叫自由存储区,而把new得来的空间叫做堆)
全局/静态存储区:存储全局变量和静态变量.
常量存储区:存储常量(常量字符串,magic number等),不允许修改.
ps:以上转自别处。。
正题:
copy = mesg; 也就是把mesg值给了copy
既然都是一个值,你还希望%p打出来是不同value么。。
[解决办法]
mesg是一个变量,但他保存的是指向字符串的指针,变量赋值肯定是一样的了
但这个指针变量也有他自己的地址(不同于字符串的地址),用&mesg来取,*(&mesg)表示字符串地址
我觉得楼主可能还要对指针再看看,指针这玩意只有多看多试才会更加明白,我是把不同的书的指针部分都重看过好几次了才现在这样,达到半吊子的程序,呵。。
推荐一本书吧,公认的比较好的书,我也正在看,才看了小半。。:《C primer plus》这本书里面内容讲的很详细
下面的是例子:
#include<stdio.h>int main(int argc,char *argv[]){ char *mesg="123456"; char *copy; copy=mesg; printf("*(&mesg)=%x &mesg=%p mesg=%p\n",*(&mesg),&mesg,mesg); printf("*(©)=%x ©=%p copy=%p\n",*(©),©,copy); return 0;}