黑马程序员技术交流社区
标题:
tell me why.........
[打印本页]
作者:
ios_fce
时间:
2014-4-25 21:58
标题:
tell me why.........
#include <stdio.h>
int main()
{
//int *pi指针指向const int i常量的情况
const int i1 = 40;
int *pi;
pi = &i1; /* 这样可以吗?不行,VC下是编译错。*/
printf("i的地址是%p pi的地址是%p\n",&i1,pi);
printf("%d\n",*pi);
*pi=23;
printf("i的地址是%p pi的地址是%p\n",&i1,pi);
printf("*p=%d i1=%d\n",*pi,i1);
}
复制代码
i的地址是0x7fff5742fc2c pi的地址是0x7fff5742fc2c
40
i的地址是0x7fff5742fc2c pi的地址是0x7fff5742fc2c
*p=23 i1=40
地址相同,结果不同,为什么???
作者:
blz01003hm
时间:
2014-4-25 22:15
貌似这就是C的强大之处
1.jpg
(147.47 KB, 下载次数: 24)
下载附件
2014-4-25 22:14 上传
作者:
gmadong@163.com
时间:
2014-4-25 22:15
const int i1 = 40; //因为被const修饰的是不能修改的 跟java中的final一样所以i1一直不会变的是40
int *pi;
pi = &i1;//我只能这样理解了 被const修改类似以宏定义 就是在编译时把i1都换成40 再在下面改就改不了啊
printf("i的地址是%p pi的地址是%p\n",&i1,pi);
printf("%d\n",*pi);
*pi=23;
printf("i的地址是%p pi的地址是%p\n",&i1,pi);
printf("*p=%d i1=%d\n",*pi,i1);
作者:
一只小菜鸟
时间:
2014-4-25 22:36
//int *pi指针指向const int i常量的情况
const int i1 = 40; //const限定变量不允许被改变。
int *pi;
pi = &i1; //你把const int * 给 int *所以会警告。 pi地址指向了i1地址
printf("i的地址是%p pi的地址是%p\n",&i1,pi);
printf("%d\n",*pi);
*pi=23; //赋值,是不会改变地址的。
printf("i的地址是%p pi的地址是%p\n",&i1,pi);
printf("*p=%d i1=%d\n",*pi,i1); //同理因为const所以输出*p=23, i1=40;
//这应该是C语言的一种机制吧,如果可以通过指针修改值,就没有const的必要了。不加const就可以输出i1=23;
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2