2、32位系统下,若以下定义和语句,则sizeof(a)的值是 【 】 ,而sizeof(b)的值是 【 】 #pragma pack(8) struct { char ch1; long lo1; char ch2; } a, *b; #pragma pack()
时间: 2024-03-31 22:32:07 浏览: 97
根据 `#pragma pack(8)` 的指示,结构体中的成员按照 8 字节对齐,因此结构体的大小为 8 字节。对于 `a` 结构体,成员变量 `ch1` 需要占 1 字节,成员变量 `lo1` 需要占 8 字节,成员变量 `ch2` 需要占 1 字节。由于 `lo1` 成员需要 8 字节对齐,因此 `ch1` 和 `lo1` 之间需要填充 7 个字节,`lo1` 和 `ch2` 之间需要填充 7 个字节。因此 `a` 结构体的大小为 1 + 7 + 8 + 1 + 7 = 24 字节。
对于指针变量 `b`,它的类型为结构体指针,所以在 32 位系统下,它的大小为 4 字节。由于结构体指针变量 `b` 没有分配内存,所以 `sizeof(b)` 返回指针类型的大小,即 4 字节。
相关问题
在32位的处理器上,定义以下结构体,则语句print("%d,sizeof(struct s));的输出结果
假设在32位的处理器上定义了以下结构体:
```c
struct s {
char c;
int i;
float f;
};
```
那么,语句`printf("%d, sizeof(struct s));`的输出结果是多少呢?
在32位处理器上,一个字节等于8位,因此在结构体中:
- `char c` 占据1个字节
- `int i` 占据4个字节
- `float f` 占据4个字节
结构体的大小则为所有成员占据空间的总和,因此`sizeof(struct s)`为1 + 4 + 4 = 9。
因此,语句`printf("%d, sizeof(struct s));`的输出结果是9。
若有以下定义和语句: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a : 则不能表示a数组元素的表达式是 。 A. *p B. a[10] C. *a D. a[p-a]
不能表示 a 数组元素的表达式是 B. a[10]。因为数组下标从 0 开始,所以 a 数组的最后一个元素的下标是 9,而不是 10。因此,a[10] 不是一个合法的数组元素表达式。而其他选项都是合法的表达式。*p 表示 a 数组的第一个元素,即 a[0];*a 也表示 a 数组的第一个元素,即 a[0];a[p-a] 是一个复杂的表达式,但是它是合法的,表示 p 指向的地址距离 a 数组的首地址相差几个 int 类型的单位,即 p 和 a 的地址差除以 sizeof(int)。
阅读全文