字符指针赋值给整型指针问题

richardvip 2011-11-16 06:39:29
如下代码:
void main(void)
{
char a[10] = {0,1,2,3,4,5,6,7,8,9};
int *ptr;

ptr = (int*)a;

printf("*ptr = %d\r\n",*ptr);
printf("*(ptr+1) = %d\r\n",*(ptr+1));
}

本以为输出为0和4,但是却输入乱七八糟的值,请问各位大侠这是什么原因,谢谢

...全文
282 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
小端:%x的话*ptr输出 03020100 *(ptr + 1)输出 07060504
大端:00010203 04050607
Mark0904 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 duke56 的回复:]

你的数组是char型的,而你的指针是int型的,按int型读取是0,1,2,3(假设下)的,接下来才再读取四个char

一般的编译器都是4个char==1个int的
[/Quote]++
dic_008 2011-11-16
  • 打赏
  • 举报
回复
char 类型提升为int类型 内存的存储结构变了。
dynamic_system 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cfjtaishan 的回复:]
恩,你把字符串的首地址强制转换后给整型,整型是占四个字节的, ptr = (int*)a;它会把a开始的四个字节作为一个数据,你每次对ptr加1,ptr都会移动四个字节。
[/Quote]

六楼,可否给我解释下用%p输出*ptr的值是:0403020100而不是43210呢
自信男孩 2011-11-16
  • 打赏
  • 举报
回复
恩,你把字符串的首地址强制转换后给整型,整型是占四个字节的, ptr = (int*)a;它会把a开始的四个字节作为一个数据,你每次对ptr加1,ptr都会移动四个字节。
richardvip 2011-11-16
  • 打赏
  • 举报
回复
谢谢各位知道了,都是因为我打印没有按照16进制输出,所以没看出来,谢谢了
richardvip 2011-11-16
  • 打赏
  • 举报
回复
谢谢各位的回复,我是在vc6.0下运行的,应该是小端格式
jixingzhong 2011-11-16
  • 打赏
  • 举报
回复
因为机器的端绪问题。

这样的输出,是将内存中的内容根据char解析并输出,可以自己转换为0/1码后解析一下看看。
duke56 2011-11-16
  • 打赏
  • 举报
回复
你的数组是char型的,而你的指针是int型的,按int型读取是0,1,2,3(假设下)的,接下来才再读取四个char

一般的编译器都是4个char==1个int的
ryfdizuo 2011-11-16
  • 打赏
  • 举报
回复
输出的值是有意义的。四个char一个int,还要考虑大小端问题

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧