一道基础题

scrutin 2008-10-24 01:12:17
小端系统里面
char array[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
char *cp = array;
int *ip = (int *)array;

*(cp+2)是多少?

*(ip+2)是多少?
...全文
174 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
idea_yuye 2008-10-28
  • 打赏
  • 举报
回复
输出一些乱七八糟的东西啊!
lunarfan 2008-10-24
  • 打赏
  • 举报
回复

0b0a0908
leiminlovesoft 2008-10-24
  • 打赏
  • 举报
回复
char array[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
char *cp = array;
int *ip = (int *)array;

printf("%d\n",*(cp+2));

//下面三句比较一下就可以了。
printf("%p\n",array);
printf("%p\n",ip + 1);
printf("%p\n",ip + 2);





-----------------------------
输出:
2 //cp指向的是array 因此 cp + 2 指向2再把2输出
0012FF70
0012FF74
0012FF78

后三个相差为4 因为是整形指针。偏移量为4

*(ip + 2)是一个随机的内容 ,因为int *ip = (int *)array;只是将ip赋一个指向array的整形指针,但是p并未指向array的一个指针,因为是强制转换并不是赋值





l51 2008-10-24
  • 打赏
  • 举报
回复
int 类型占用几位要看操作系统是几位的,并且还要看 C++ 的编译器是几位的,
不是想当然的32位, 如果放到64位机上,结果又不同的。
如果编译器进行强类型检查的话,
(int *)array;
应该不能通过。
anybbs 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 anybbs 的回复:]
*(cp+2) 2
*(ip+2) 993671480
[/Quote]

char array[16] = {'0',...} ???????
Dan_M 2008-10-24
  • 打赏
  • 举报
回复
*(cp+2); 2

*(ip+2); 0x0b0a0908
ren03 2008-10-24
  • 打赏
  • 举报
回复
第一个输出2吧,因为cp是char型指针,所以cp加2相当于加了2*sizeof(char)个字节,cp指向的是2;
第二个输出0x0b0a0908(十六进制),ip是int型指针,加2相当于加了2*sizeof(int)个字节,
此时指向的是{8,9,10,11},这四个数值是8在低字节,11( 十六进制是0b)在高字节所以输出的是0b0a0908(十六进制)
anybbs 2008-10-24
  • 打赏
  • 举报
回复
*(cp+2) 2
*(ip+2) 993671480
xhs_lh04 2008-10-24
  • 打赏
  • 举报
回复
*(cp+2)=2
*(ip+2) = 0xB0A0908
+2,偏移8,字符是8,9,10,11所以数应该是0xB0A0908
刚才看错
tsaiyc 2008-10-24
  • 打赏
  • 举报
回复
正解[Quote=引用 3 楼 lbh2001 的回复:]
上面按错键了
引用楼主 scrutin 的帖子:
小端系统里面

C/C++ codechar array[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
char *cp = array;
int *ip = (int *)array;

*(cp+2)是多少?

*(ip+2)是多少?

*(cp+2)为 2
*(ip+2)为 0x0B0A0908
[/Quote]
mifeixq 2008-10-24
  • 打赏
  • 举报
回复
呵呵,这个题目还比较有意思……

*(cp+2) 不用怀疑,一定是2了……

那么看看*(ip+2)应该是多少呢?
首先 (int *)array 把 array强行转换成int *类型 (4 Bytes)那么也就是说,ip+1 == array+4 ip+2== array + 8

那么*(ip+2)应该是从array+8到array+11的内容 0b0a0908 验证一下

mifei@P-I-mi:~/C$ cc test.c
mifei@P-I-mi:~/C$ ./a.out
b0a0908,8,0xbfe86b84,0xbfe86b84
mifei@P-I-mi:~/C$ cat test.c
#include <stdio.h>

int main(){
char array[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
char *cp = array;
int *ip = (int *)array;
printf("%x,%x,%p,%p\n", *(ip+2),*(cp+8),ip+2,cp+8);

return 0;
}
mifei@P-I-mi:~/C$


果然如此……
xhs_lh04 2008-10-24
  • 打赏
  • 举报
回复
*(cp+2)=2
*(ip+2)未知
lbh2001 2008-10-24
  • 打赏
  • 举报
回复
上面按错键了
[Quote=引用楼主 scrutin 的帖子:]
小端系统里面

C/C++ codechar array[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
char *cp = array;
int *ip = (int *)array;

*(cp+2)是多少?

*(ip+2)是多少?
[/Quote]
*(cp+2)为 2
*(ip+2)为 0x0B0A0908
lbh2001 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 scrutin 的帖子:]
小端系统里面

C/C++ codechar array[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
char *cp = array;
int *ip = (int *)array;

*(cp+2)是多少?

*(ip+2)是多少?
[/Quote]

*(cp+2)为 3
*(ip+2)为 0x0B0A0908
idea_yuye 2008-10-24
  • 打赏
  • 举报
回复
*(cp+2)=2;
*(ip+2)=50;

69,371

社区成员

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

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