区别指针,指针数组,数组指针
1指针,p指向元素的地址。
#include <stdio.h>
int main()
{
int a=2;
int *p=&a;//可以分开,p=&a;
printf("%d\n",*p);
return 0;
}
2指针数组,由指针构成的一个数组。
(方法:1新建一组数据;2建立指针数组*p[5]={&a,&b,&c};3输出 *p[1])
#include <stdio.h> //指针数组
int main()
{
int a=1,b=2,c=3,d=4,e=5;
int i=0;
int *p[5]={&a,&b,&c,&d,&e};
for(;i<5;i++)
{
printf("%d\n",*p[i]);
}
return 0;
}
3数组指针
eg1一维数组
(方法:1 int (*p)[5]=&temp,2输出 *(*p+i) )
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5},i=0;
int (*p)[5]=&a;//也可以p=&a;
//或者&a[0];
for(i=0;i<5;i++)
{
printf("%d\n",*(*p+i));
}
return 0;
}
eg2 二维数组
(方法:1int (* p)[5]=temp;2输出 * (*(p+i)+j) ,i表示行,j表示列)
问题是:1 p表示第一行的首元素地址,p+1为什么可以表示第二行的首地址,如何做到的?2 定义数组指针时=temp,怎么解释?
#include <stdio.h>//二维数组指针
int main ()
{
int i,j;
int temp[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}};
int (*p)[4];//把二维数组转化为四列的数组;p指向一个一维数组的第一个元素;p+1是二行的第一个元素。
p=temp;//注意是temp,不是&temp。因为这样p+1可以增加一个跨度4*sizeof(int),继而p+1表示第二行首元素地址。这里并不是很明白。
for (i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",*(*(p+i)+j));
}
printf("\n");
}
return 0;
}