【发布时间】:2014-09-19 17:08:40
【问题描述】:
使用 char 指针转换的 Hello int 指针类型会抛出意外输出? 以下是我的代码,请帮助我理解
#include<stdio.h>
int main()
{
int arr[3]={2,3,4};
char*p;
p=(char*)arr;
printf("%d\n",*p); // here 2 its good
p=p+8;
printf("%d\n",*p);//here 4 why not 1?
}
【问题讨论】:
-
no...不考虑错别字,应该是4。
-
应该是
int arr[3] = {2,3,4};吗?您的示例中没有int*。 -
位不是字节。字符是 1 个字节长,而不是 8 个字节长。 arr+8 在数组之外,因此可以打印任何内容或崩溃。
-
p=p+8 指向保存整数值 3 的内存地址 -- 仅当
ints的长度为 8 个字节时。 即第 1 位 1 和第 2 位 2 所以 p=p+8 表示内存的第一位 -- 不,位没有单独的地址,字节有。