我试图找出如何使用指针访问结构数组

#include<stdio.h>

struct p
{
int x;
char y;
};


int main()
{
struct p p1[]={1,92,3,94,5,96};
struct p *ptr1=p1;

printf("size of p1 = %i\n",sizeof(p1));

//here is my question, how can I use ptr1 to access the next element of the array
//of the struct?
printf("%i %c\n",ptr1->x,ptr1->y);

int x=(sizeof(p1)/3);
if(x == sizeof(int)+sizeof(char))
    printf("%d\n",ptr1->x);
else
    printf("falsen\n");
return 0;
}

//我的问题是,如何使用ptr1访问数组的下一个元素
结构的?
我试图写这行代码,但出现了一个错误
printf("%i %c\n",ptr1[0]->x,ptr1[1]->y);

错误是
invalid type of argument '->'(have'struct p')

是否必须将ptr1声明为指针数组?
如果我不知道结构数组的大小如何声明指针数组,
这里还有一个问题,指针的大小应该是多少?尺寸(ptr1)?
我试过这行代码
printf("size of ptr1 = %i",sizeof(ptr1));

答案是4?!!怎么会?
谢谢

最佳答案

如果要访问结构类型数组的第二个元素,则只需按如下方式递增递增指针:

  ptr1++;

现在指针将指向结构类型数组的第二个元素。
你的第二个答案是:
指针保存变量的地址,变量的地址被视为整数值。所以基于机器指针的大小也是整数。签入您的计算机整数大小应该是4,这就是为什么它会显示指针4的大小。

07-24 09:44
查看更多