为什么以字符型打印指针变量是一个?
printf("%p\n",&p1);//p1的地址:0018FF3Cprintf("%p\n",&p2);//p2的地址:0018FF38 由此可知地址是占用四个字节的。与其对象类型无关。
#include<stdio.h>
int main()
{
int *p1;
char *p2;
printf("%d\n",p1);
printf("%d\n",p2);
printf("%c\n",p1);
printf("%c\n",p2);
printf("%p\n",&p1);//p1的地址:0018FF3C
printf("%p\n",&p2);//p2的地址:0018FF38 由此可知地址是占用八个字节的。与其对象类型无关。
printf("%d\n",&p1);//p1的地址:0018FF3C
printf("%d\n",&p2);//p2的地址:0018FF38 由此可知地址是占用八个字节的(与电脑系统的位数有关64/8=832/8=4)。与其对象类型无关
return 0;
}
运行结果是这样的 编译环境是vc6.0 不纠结这种问题了,毫无意义! 甚至说是钻牛角尖了。
在新版的Visual Studio里面,变量没有初始化而直接使用,会报错,而不是报警告。然后很明确的你,你没有初始化这个变量,你就不能用使用它。
如果你使用的是VC++6.0那么编译器会帮你初始化! 未初始化的变量啊!指针啊! 都指向一个地址,好像是0xcc
按照win32 一个int四个字节来算,也就是32位,1位16进制可以表示4位二进制位,也就是0xcccccccc,换算成十进制 你的-858993460也就是这么来的。 至于指针,你就当做给他暂时放了个东西在里面,但是你没有权限去知道这个里面是个什么东西,因为这个地址是windows的内核地址。 windows不像linux一样对用户开放,这块区域是用户不能访问的!如果你确实感兴趣 可以去学下汇编,和编译原理。
综上所述仅适用于微软家的IDE其他的比如GCC什么的 好像并没有这种所谓的初始化行为!
因为c中字符型数据在内存储存形式和整型是一样的,然后字符型格式控制符按照ascll码表进行转换,所以在0-128之外是没有定义的,都是问号
风过无痕丶 发表于 2018-7-1 14:21
不纠结这种问题了,毫无意义! 甚至说是钻牛角尖了。
在新版的Visual Studio里面,变量没有初始化而直接使 ...
好的,就是自己想试试,然后出现这个结果就想知道它是怎么回事。
谢谢
页:
[1]