aar*_*had -3 c pointers while-loop
program
int main()
{
int a=0xabcd;
char *p=&a;
while(p)
{
if(*p=='c')
{
printf("i got %c\n",*p);
return;
}
p++;
}
}
Run Code Online (Sandbox Code Playgroud)
1)为什么我总是得到一个像"我得到c"的答案.
2)无论我执行多少次这个程序,为什么我得到%c为c.
3)用任何字符替换c字符,无论如何,为什么我们得到这样一个字符,如果条件,我们放入什么?
if(*p=='z') or if(*p=='t') or ....
Run Code Online (Sandbox Code Playgroud)
4)任何人都可以解释是什么原因?
int a=0xabcd
在32位机器上会给你0x0000abcd
.如果您尝试将此整数的内容作为字符读取,则将获得0x00或0xcd,具体取决于字节顺序.也不是可打印的ASCII字符.这没有任何意义.
while(p)
表示"当p指向非零的地址".这没有任何意义.因此,您继续循环并读取分配的整数之外的随机存储器单元.任何事情都可能发生.如果运气好的话,程序会崩溃.
总而言之,你似乎并不知道自己在做什么......