指针数组代表就是一个数组,只不过是指针类型的数组
怎么判断是数组还是指针,很简单,看它占多少字节,指针始终是4个字节,可以用到sizeof
上图所示 int ***p[5][2]指针数组中,*p是什么类型?如图所示,把 *p赋值给整数型a,程序报错,错误显示如红框所示,说明*p的类型是int ***[2]
int fun()
{
int *p[5];//指针数组
int a[5];
p[0]=&a[0];
p[1]=&a[1];
p[2]=&a[2];
p[3]=&a[3];
p[4]=&a[4];
printf("%d",sizeof(p));
return 0;
}
上面代码是给指针数组赋值,下面代码也是
int fun() //esp-0x7c
{
int **p[5];//指针数组 ebp-0x14
int a[5];//ebp-0x28
int b[5];//ebp-3c
p[0]=(int **)&a[0];
p[1]=(int **)&a[1];
p[2]=(int **)&a[2];
p[3]=(int **)&a[3];
p[4]=(int **)&a[4];
*p[0]=(int*)&b[0];
*p[1]=(int*)&b[1];
*p[2]=(int*)&b[2];
*p[3]=(int*)&b[3];
*p[4]=(int*)&b[4];
**p[0]=1;
**p[1]=2;
**p[2]=3;
**p[3]=4;
**p[4]=5;
printf("%d",sizeof(p));
return 0;
}
下面代码用for循环赋值
int fun() //esp-0x7c
{
int *p[5];//指针数组 ebp-0x14
int a[5];//ebp-0x28
int b[5];//ebp-3c
int i;//ebp-40;
for (i=0;i<5;i++)
{
p[i]=&a[i];
*p[i]=i;
}
for (i=0;i<5;i++)
{
printf("%dn",*p[i]);
}
return 0;
}
二.数组指针
数组指针代表就是指针,只不过这个指针是指向这个数组的
一般格式如图所示 ,占4个字节,上面数组指针int(*p)[5]中,p是什么类型,如下图所示,类型是int(*)[5]
*p的类型是int [5]
int fun1()
{
int (*p)[5];//ebp-0x4
int a[5];
p=(int(*)[5])a;
(*p)[0]=1;
(*p)[1]=2;
(*p)[2]=3;
(*p)[3]=4;
(*p)[4]=5;
printf("%dn",sizeof(p));
return 0;
}
上面代码是给数组指针赋值
今天的文章就到这里了,如果有任何不明白的地方欢迎与我交流,我必定知无不言。这篇文章也花了一定的心血,喜欢的小伙伴可以点赞关注哦。感激不尽!



