【发布时间】:2021-04-03 08:07:39
【问题描述】:
结构
struct student
{
int rollno;
char name[10];
float marks;
};
主要功能
void main()
{
struct student **s;
int n;
要动态分配的内存总大小
printf("Enter total number of students:\n");
scanf("%d",&n);
printf("Size of **s: %ld\n", sizeof(**s));
为什么这里*s和s的大小是8?
printf("Size of *s: %ld\n", sizeof(*s));
printf("Size of s: %ld\n", sizeof(s));
s = (struct student **)malloc(sizeof(struct student *)* n);
动态分配内存给指针数组
for(int i = 0; i<n; i++)
s[i]=malloc(sizeof(struct student));
用户定义数据
for(int i = 0; i<n; i++)
{
printf("Enter the roll no:\n");
scanf("%d",&s[i]->rollno);
printf("Enter name:\n");
scanf("%s",s[i]->name);
printf("Enter marks:\n");
scanf("%f",&s[i]->marks);
}
printf("Size of **s:%ld\n",sizeof(**s));
for(int i = 0; i<n; i++)
printf("%d %s %f\n", s[i]->rollno, s[i]->name, s[i]->marks);
free(s);
}
【问题讨论】:
-
两个
sizeof()表达式都有一个指针类型作为参数。你希望他们是什么? -
请注意,
size_t(sizeof的结果类型)最合适的转换说明符是%zu。 -
当我试图找出指针的大小时,我发现它是 4 个字节。我知道指针大小取决于机器,与任何指针类型无关。但是当试图找到分配给它的结构的指针大小时,它给出了 8 个字节,所以我担心的是为什么这些指针有两种不同的大小
标签: c++ c pointers structure sizeof