数组指针:【存储类型】数据类型 (*指针名)【下标】=值
该指针存放着一个数组的首地址,或者指针指向一个数组的首地址
如:int(*p)[3]; ---> type name; --->int[3] *p; 定义指针*p指向int[3]的首地址
代码如下:
int main()
{
int a[2][3]={1,2,3,4,5,6};
int i,j;
int *p= *a; //注意a为行单位变化,p为列单位变化但无法跳转行,只能按列逐位移动
int (*q)[3]=a; //q+1一次跳转int a[3], 所以作用与 a+1一致,3最合理,
//其他数不恰当
p = &a[0][0];
for(i = 0;i<6;i++,p++)
printf("%d ",*p);
printf("\n");
printf("%p %p\n",a,a+1);
printf("%p %p\n",q,q+1); //此处a与q是一样的
for(i = 0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%p-->%d\n ",*(a+i)+j,*(*(a+i)+j));//所以,此处a可以直接替换为q。
}
printf("\n");
}
exit(0);
}
指针数组:【存储类型】数据类型 *数组名【长度】
该数组的所有元素都是指针类型
如:int *arr[3]; --->TYPE NAME; -->int *[3] arr;即arr包含3个指针变量的int*
代码如下:
int main()
{
int i, k, j;
char *tmp;
char *name[5] = {"Follow me","Basic","Great","Fortran","Computer"};
//char *与一级指针char用法相同
for(i = 0; i < 5-1; i++)
{
k = i;
for(j=i+1; j<5;j++)
{
if(strcmp(name[k],name[j]) > 0)
k = j;
}
if(k != i)
{
tmp = name[i];
name[i] = name[k];
name[k]= tmp;
}
}
for(i=0;i<5;i++)
puts(name[i]);
exit(0);
}