如果机器是 32 位小尾数且 sizeof(int) 是 4 字节。
给定以下程序:
line1: #include<stdio.h>
line2: {
line3: int arr[3]={2,3,4};
line4: char *p;
line5: p=(char*)arr;
line6: printf("%d",*p);
line7: p=p+1;
line8: printf("%d\n",*p);
line9: return 0;
}
预期输出是什么?
A
:2 3
B
:2 0
C
:1 0
D
:垃圾值
有一件事情让我困扰,即将整数指针转换为字符指针。
选角有多重要?
编译器在第 5 行做什么? (
p = (char *) arr;
)第 7 行发生了什么? (
p = p + 1
)如果输出是
20
,那么如何打印出0
?
最佳答案
(E) 以上都不是
但是,假设 (a) 您使用的是小端机器(例如 x86),并且 (b) sizeof(int) >= 2
,则应打印“20”(不两者之间打印空格)。
a) 强制转换对于一次读取一个字节的数组是“必要的”,而不是读取一系列 int
s
b) 这只是将第一个 int
的地址强制转换为指向 char
的指针
c) 将 p
中存储的地址增加 sizeof(char)
(即 1)
d) 第 8 行打印 int
机器表示的第二个字节
关于c - 以下哪项是下面给出的程序的正确输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11653121/