C语言这个怎么解惑,怎么办

img


三道,只需要,已知struct Student,则stud在内存中所占的存储空间,我是这么想的

1.定义了一个指向整型数组的指针 pt,将它指向数组 a,那么你可以使用如下语句来表示数组 ai 行第 j 列的元素:

*(pt+i)+j

2.struct Student 需要占用 4 + 1 + 8 = 13 个字节的存储空间。stud 是一个 struct Student 类型的数组,其中包含 5 个元素。因此,stud 数组在内存中占用的存储空间应该是 13 x 5 = 65 个字节。
3.

- 使用下标访问,即:stud[3].a
- 使用指针访问,即:(pst + 3)->a

(1)*(*(pt+i)+i*2+j)
(2)80
(3)stud[3].a,(pst+3)->a
int t[6][8];
    int p=0;
    for(int i=0; i<6; i++)
    {
        for(int j=0; j<8; j++)
        {
            t[i][j]=p++;
            printf("%3d",t[i][j]);
        }
        printf("\n");
    }
    int i=2,j=6;
    printf("%d\n",t[i][j]);
    int (*pt)[6];
    pt=t;
    printf("%d\n",*(*(t+i)+j));
    printf("%d\n",*(*(pt+i)+i*2+j));

img

struct A
    {
        int n;
        char mm;
        double hkk;
    } T[5],*pa;

    pa=T;

    T[3].n=7252;
    printf("%d\n",(pa+3)->n);
    printf("%d\n",sizeof(T));

详细解答如下,望采纳

第1题

在上述代码中,pt是一个指向整型数组的指针,它指向了a数组的第一行。如果要使用pt表示a数组第i行第j列的元素,可以使用以下两种方式:

  • 使用指针运算,通过对pt的偏移访问数组元素:
    (*(pt + i) + j)
    
  • 使用二级指针,通过指针间的赋值访问数组元素:
    int *p = *(pt + i);
    p[j]
    

第2题

在上述代码中,stud是一个包含5个Student结构体的数组。由于Student结构体内有一个整型成员、一个字符型成员和一个双精度浮点型成员,因此stud数组中每个元素都会占用4 + 1 + 8 = 13个字节的存储空间。因此,stud数组在内存中所占的存储空间为5 x 13 = 65个字节。


第3题

在上述代码中,pst是一个指向Student结构体的指针,它指向了stud数组的第一个元素。如果要访问stud数组第4个元素的成员a,可以使用以下两种方式:

  • 使用指针运算,通过对pst的偏移访问数组元素:
    (pst + 3)->a
    
  • 使用下标运算符,通过下标访问数组元素:
    pst[3].a