C语言关于指针赋值的问题
先看一段代码:
#include<stdio.h>
void main()
{
int*p=10;
printf("%d",p);
}
看看上述代码有什么问题没有?相信清楚指针概念的各位知道,int*p其实划分来看是(int*)p,他其实是一个指针,那么int*p=10;等价于int*p;p=10;,大家都知道,指针就是地址,前面语句的意思是,把常量10的值赋给指针p,按照定义来说,这是不合法的,因为常量不能直接赋值给指针,比如int a=10;int*p=&a;这才是合法的。但是我通过VC6.0编译器编译一下,文件名为al.C(注意了,非CPP后缀),结果编译器毫不报错;输出结果为10。
把代码换一种形式:
#include<stdio.h>
void main()
{
int*p;
p=10;
printf("%d",p);
编译器通过,结果依旧是输出10;
再换个输出:
#include<stdio.h>
void main()
{
int*p;//上面验证了2种情况一样,这里就不验证2次了
p=10;
printf("%d",*p);
}
编译器依旧不报错,只是输出为空,什么都不输出
这完全颠覆了我常量不能直接赋值给地址的概念,我现在有点晕,有没有知道这是为什么的,给我个合理的理解方法,让我理解为什么会是这样,这样到底合不合法,为什么概念说他不合法,常量赋值给指针,计算机是如何完成操作的?为什么P输出的是10?这不科学啊,谁来解释下。
[解决办法]
最后,来解释一下,在楼主您的例子中,为什么会出现“输出为10”这个“奇怪的现象”。
为了解释清楚这个问题,我们把我上面所举例子的代码延伸一下:
#include<stdio.h>int main(void) { int *p; p = (int *) 10; printf("%d\n", p); p = (int *) 'a'; printf("%c\n", p); p = (int *) "I Love C/C++! Oh, Yeah!"; printf("%s\n", p); return 0;}