首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为啥value的值是一样的呢?求解释的清楚一些,很是疑惑

2012-09-18 
为什么value的值是一样的呢?求解释的清楚一些,很是疑惑。#include stdio.hint main(void){const char * m

为什么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; &copy = %p; value = %p\n",
  copy, &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》这本书里面内容讲的很详细

下面的是例子:

C/C++ code
#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("*(&copy)=%x &copy=%p copy=%p\n",*(&copy),&copy,copy);    return 0;} 

热点排行