代码#include<stdio.h> struct ps{ double i; char arr[24]; }; int main() { struct ps s[3], *p1, *p2; p1=s; p2=s+2; printf("%d,%d\n", p2-p1, sizeof(struct ps)); return 0; }中 sizeof(struct ps)的值为什么为32
时间: 2024-04-26 07:25:49 浏览: 135
在这个程序中,我们定义了一个结构体`ps`,其中包含一个`double`类型的变量`i`和一个长度为24的字符数组`arr`。由于`double`类型变量通常占用8个字节,而字符数组`arr`长度为24,因此结构体`ps`的大小为`8 + 24 = 32`字节。
在`main`函数中,我们定义了一个包含3个`ps`类型元素的数组`s`,并将指针变量`p1`指向`s`的第一个元素,将指针变量`p2`指向`s`的第三个元素。所以,`p2-p1`的值为2,即指针`p2`和`p1`之间隔了2个元素,每个元素的大小为32字节,因此`sizeof(struct ps)`的值为32字节。
相关问题
本题输出结构变量bt所占内存字节数。 #include <stdio.h> struct ps{ double i; char arr[24]; }; int main(){ struct ps bt; printf("bt size:%d\n", ); return 0; }
结构体 `bt` 中包含一个 `double` 类型的变量 `i` 和一个长度为 24 的字符数组 `arr`。 `double` 类型在大多数系统中占用 8 个字节,字符数组中的每个元素占用 1 个字节。另外,由于内存对齐的原因,结构体的大小通常会按照最宽基本类型成员的大小来对齐。因此,结构体 `bt` 的大小应该为:
```
sizeof(double) + 24 * sizeof(char) = 8 + 24 = 32
```
因此,程序应该输出:
```
bt size:32
```
#include<stdio.h> #include<string.h> struct student{ char name[100]; int age; }; int main(void) { int i,j; struct student arr[5]; for(i=0;i<5;i++) { scanf("%s%d",arr[i].name,&arr[i].age); } for(i=0;i<4;i++) {
在代码中,最后一个for循环没有结束,缺少右括号。下面是修改后的代码:
```
#include<stdio.h>
#include<string.h>
struct student{
char name[100];
int age;
};
int main(void) {
int i,j;
struct student arr[5];
for(i=0;i<5;i++) {
scanf("%s%d",arr[i].name,&arr[i].age);
}
for(i=0;i<4;i++) {
for(j=0;j<4-i;j++) {
if(arr[j].age>arr[j+1].age) {
struct student t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
for(i=0;i<5;i++) {
printf("%s %d\n",arr[i].name,arr[i].age);
}
return 0; //需要加上返回值
} //需要加上右括号
阅读全文