c语言指针数组和结构体的指针

时间:2023-03-08 18:13:00

  指向数组的指针,先初始化一个数组,使用传统方式遍历

 void main()
{
int a[] = { ,,,, };
for (int i = ; i < ; i++)
{
printf("%d,%x\n", a[i], &a[i]);
printf("%d,%x\n",*(a+i),a+i); //等价 a[i] , &a[i]
}
}

  a就是数组a的首地址,即元素1的地址, a + 1 代表 地址+1,即这里就是增加 int型 4字节的长度, 指向下一个地址即元素2的地址

 int a[] = { ,,,, };
int *p = NULL; //创建一个空指针
p = a;//p是一个指针变量,a就是 数组首地址 元素1的地址

  因为我们利用指针遍历同样能达到效果

 //利用指针循环
for (int *pp = a; pp<a+; pp++) //地址++
{
printf("%d,%x\n",*pp, pp);
}

  有了上面的理解,指针结构体其实是一样的。

 //指针结构体
struct info
{
char name[];
int id;
}; void main()
{
struct info myinfo[] = { {"zc1",},{ "zc2", }, {"zc3",}, {"zc3",}, {"zc4",} }; //常规方式输出
for (int i = ; i < ; i++)
{
printf("%s,%d\n",myinfo[i].name, myinfo[i].id);
//指针
printf("%s,%d\n", (*(myinfo+i)).name, (*(myinfo + i)).id);
} //利用指针循环,指针结构体
struct info *px = myinfo;
for (; px < myinfo; px++)
{
printf("%s,%d\n", px->name, px->id); //指针结构体输出方式 指针变量->属性
printf("%s,%d\n", (*px).name, (*px).id); //指针结构体输出方式 *指针变量.属性
// px->id等价 (*px).id
} getchar(); }