读书人

关于 常量和指针的有关问题? 各种大神

发布时间: 2013-08-09 15:16:24 作者: rapoo

关于 常量和指针的问题? 各种大神请进
const int a = 1;
int *p = &a;
*p = 10000;
printf("%d\n",a);

resualt : a =10000

a 的值为什么可以改变了?
a在常量区的啊。
C语言里面的const 难道只有一半的作用?难道只是一种提示?


求详细解答,越详细越好。

1、另外再求一些关于 字符串 数组 指针 这3个东西相比较的一些资料,越详细越好,
2、还有malloc 内存分配 更加深入的更加详细的一些资料。

《C和指针》这本书上1、这方面的内容我看的不是特别清楚。

先谢谢了。 指针 C 内存分配 malloc
[解决办法]
首先你说的const修该的变量a是常量就错误。这就直接导致你认为后面全是错的。Const并不会修改变量的存储位置,a定义的空间仍然是可读写,因为它的存储空间不在常量区。const它的功能仅仅是告诉编译器变量a不能当左值,如果在后面碰到a为左值的话,报错。但是并不妨碍我们用变量p指向a的空间修改a的值。Const仅仅是在C语言层面模拟的假常量,只要用指针变量就能突破这种假象。
[解决办法]

引用:
Quote: 引用:


1 #include <stdio.h>
2
3 int main (void )
4 {
5
6 const int a = 1;
7 int *p = ( int*) &a;
8 *p = 10000;
9 printf(" a = %d\n",a);
10 printf(" &a = %p\n",&a);
11 printf(" *p = %d\n",*p);
12 printf(" p = %p\n",p);
13
14 }


输入结果:

a = 1
&a = 0xbf904d38
*p = 10000
p = 0xbf904d38



字符串 数组 指针 看看在这个,自己好好理解下 地址 和指针的关系!
http://blog.csdn.net/yanludroiyan/article/details/3995276


对于malloc函数 分配堆空间
http://lionwq.spaces.eepw.com.cn/articles/article/item/18555
看看博客吧!


自己多多敲下代码,实践才是检验真理的唯一标准!
不懂的可以继续来问 关于 常量和指针的有关问题? 各种大神请进







引用:
Quote: 引用:

const int a = 1;
int *p = &a;
*p = 10000;
printf("%d\n",a);

resualt : a =10000

a 的值为什么可以改变了?
a在常量区的啊。
C语言里面的const 难道只有一半的作用?难道只是一种提示?


求详细解答,越详细越好。

1、另外再求一些关于 字符串 数组 指针 这3个东西相比较的一些资料,越详细越好,
2、还有malloc 内存分配 更加深入的更加详细的一些资料。

《C和指针》这本书上1、这方面的内容我看的不是特别清楚。

先谢谢了。


1 #include <stdio.h>
2 int main(void){
3 const int a =1;
4 int * p = (int *) &a;
5 *p = 200;
6 printf("a = %d\n",a);
7 printf("&a = %p\n",&a);
8 printf("*p = %d\n",*p);
9 printf("p = %p\n",p);
10 return 0;
11 }



a = 200
&a = 0x7fff3578f0a4
*p = 200
p = 0x7fff3578f0a4

怎么回事?
gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1)


脑袋都晕了,居然引用了。。



其实没必要纠结这种问题的,如果你是一个程序员的话,你也不可能写出这样的代码的!
const 变量是可读的,但是你把强转(int *) 说不定就让成为可读的了

编译器到底是怎么处理的,我们也不清楚,只能根据常规情况!

读书人网 >C语言

热点推荐