我现在是c语言和学习指针的新手。我需要在指针转换中做一点澄清。
#include<stdio.h>
int main(){
char *c = "hello";
for(int i = 0;i<5;i++)
printf("c:%c %d\n",c[i],c[i]);
int *ip = (int*)c;
printf("after casting");
printf("c:%d\n",*ip);
return 0;
}
OUTPUT:
c:h 104
c:e 101
c:l 108
c:l 108
c:o 111
after castingc:1819043176
那么,这个值是什么意思1819043176?任何垃圾价值或代表任何东西。 在此程序中,将char指针转换为整数指针后。这个printf(&#34; c:%d \ n&#34;,* ip);声明显示了一些价值 ip如1819043176.我无法理解这个值是什么1819043176
请帮助我理解。谢谢。答案 0 :(得分:0)
您的程序执行了一些不允许的操作 - 将char
指针转换为int
指针。根据平台的不同,某些char
指针可能没有有效的表示形式作为int
指针,因此禁止转换;你看到的是未定义的行为。
然而,对于发生的事情有一个合理的解释。考虑这个将字符串复制到整数数组的程序:
int data[2] = {0};
strcpy((char*)data, "hello");
printf("%s\n", (char*)data);
printf("%d\n", data[0]);
这是允许的,因为int
指针可以在所有平台上转换为char
指针(实际上,标准要求所有对象指针都可以转换为char*
)。
上面这个程序中的结果printed与你得到的值匹配,即1819043176.这是一个特定于平台的数字,它是将"hello"
的初始四个字节重新解释为整数。