将指针作为int指针转换为字符串文字的结果是什么?

时间:2017-09-17 12:19:13

标签: c pointers

我现在是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

请帮助我理解。谢谢。

1 个答案:

答案 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"的初始四个字节重新解释为整数。