为什么在下面的 C 代码中结构指针 **s 的大小在取消引用为 '*s' 并进一步指向 's' 时为 8? .谁能解释一下

Why is the size of structure pointer **s when derefenced to '*s' and further to 's' is 8 in the below code in C? . Can anybody please explain it

Structure

     struct student
     {
              int rollno;
              char name[10];
              float marks;
     };
     

main Function

     void main()
     {
              struct student **s;
              int n;

Total size of memory to be dynamically allocated

              printf("Enter total number of students:\n");
              scanf("%d",&n);

              printf("Size of **s: %ld\n", sizeof(**s));

Why the size of *s and s is 8 here ?

              printf("Size of *s: %ld\n", sizeof(*s));

              printf("Size of s: %ld\n", sizeof(s));

              s = (struct student **)malloc(sizeof(struct student *)* n);

Allocating memory dynamically to array of pointers

              for(int i = 0; i<n; i++)
                   s[i]=malloc(sizeof(struct student));

User defined data

              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);
     }

Why the size of *s and s is 8 here ?

原因:*s是一个指针(struct student*),s是一个指向指针的指针(struct student**)。
而一个指针的大小是8字节(64位系统)

指针类型与表示主机系统上的地址所需的一样大。在 x86-64 平台上,所有指针类型都倾向于 64 位或 8 个 8 位字节宽。 表达式 s*s 都具有指针类型(分别为 struct student **struct student *),因此在您的平台上它们是都是 8 字节宽。

指针类型的大小在不同的平台上会有所不同,同一平台上不同的指针类型可能有不同的大小。唯一的要求是:

  • char *void * 具有相同的大小和对齐方式;
  • 指向限定类型​​的指针与其非限定等价物(例如,sizeof (const int *) == sizeof (int *))具有相同的大小和对齐方式
  • 所有 struct 指针类型具有相同的大小和对齐方式;
  • 所有 union 指针类型具有相同的大小和对齐方式。