数组和指针,数组指针,指针数组
数组
声明一个数组
int arr[]={100,200,300};
这个比较简单,不做过多介绍
数组指针
数组指针是一个指针
,指向数组的首地址,我们可以通过指针数组操作数组,举个栗子如下:
int main()
{
int arr[] = {100,200,300};
int* p = arr;
*p = 400;
for (int i = 0; i < 3; i++)
{
//输出结果为:
printf("%d\n", arr[i]);
}
}
上面代码的输出结果为:400,200,300
我们如果想操作数组的第二个数值,可以通过*(p+1) = xxx;
来实现,其它同理。这种操作也叫做指针运算,指针的+1操作,是指针在内存中走过对应类型的步长
,如上面代码是int类型的指针,所以走过的步长是4,内存中对应的就是数组的第二个元素(数组在内存中是连续的)。
如果是byte类型对应*(p+1)
只加1字节
shor类型对应*(p+1)
只加2个字节
指针数组
顾名思义:指针数组是一个数组,数组中存放的每一个元素都是一个指针
举个栗子:
int main()
{
int arr[] = {100,200,300};
int* p[3];//指针数组
for (int i = 0; i < 3; i++)
{
p[i] = &arr[i];
}
for (int i = 0; i < 3; i++)
{
printf("指针数组:%d\n", *p[i]);
}
return 0;
}
上面代码的输出结果为(*p[i]表示指针指向的元素):
指针数组:100
指针数组:200
指针数组:300
优先级
()
> []
> *
比如int* p[3];
因为[]
的优先级大于 *
,所以这句代码表示:声明的是一个数组,数组的数据类型是指针
数组指针(也叫行指针)
定义: int (*p)[n] 如上所述 ()
的优先级是最高的,所以这句代码表示:声明一个指针,指向的数据类型是数组
举个栗子:
int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a;//将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++;//该语句执行过后,也就是p=p+ 1;p跨过行a[0][]指向了行a[1]]
数组指针可以表示一个二维数组,比如一张图片,可以认为由一个二维数组组成,利用指针数组可以浏览一张图片。
指针数组与数组指针的区别:

指针数组:是一个数组
,每个元素是一个地址
数组指针:是一个变量,变量存放的是指针,指向一个二维数组第一行的首地址,步长是数组的一行,如果p+1name指针指向二维数组第二行的首地址,所以也叫行指针。
网友评论