首 先 , 指 针 变 量 既 然 可 以 指 向 变 量 , 也 能 指 向 数 组 元 素 , 因 此 , 在 赋 值 时 候 数 组 元 素 的 名 称 就 是 \color{red}{首先,指针变量既然可以指向变量,也能指向数组元素,因此,在赋值时候数组元素的名称就是} 首先,指针变量既然可以指向变量,也能指向数组元素,因此,在赋值时候数组元素的名称就是数组元素的首地址
数组指针(array pointer):指向数组的指针。
首先它是一个指针,它指向一个数组。
如:int (*p)[5] 中为申明一个指针 (*p)指向一个普通数组并且大小为5的数组;
#include<stdio.h>
int main()
{
int i;
int b[5]={1,3,5,7,9};
int (*a)[5] = &b;
for(i = 0;i<5;i++)
{
printf("%d\n",(*a)[i] );
}
return 0;
}
输出结果为:
1 3 5 7 9
#include <stdio.h>
int main()
{
//数组指针
int *p,arr[5]={1,2,3,4,5};
p=arr;
p+1==arr+1;
printf("%d \n",*p);
printf("%d",*p+1);
return 0;
}
输出结果为:
1 2
&arr+1表示了该数组下一个地址。,而&arr 与 arr 或者 &arr[0] 一致,都表示该数组的首地址。
指针数组(pointer array): 具有指针类型元素的数组。
首先它是一个数组,数组的元素都是指针。
如:int *p[5] 理解为一个大小为5且存放整型指针的数组,即为数组中存放的是地址;
#include<stdio.h>
int main()
{
int a=1,b=2,c=3;
//指针数组
int *arr[]={&a,&b,&c};
int **parr=arr;
printf("%d %d %d \n" ,*arr[0],*arr[1],*arr[2]);
printf("%d %d %d \n" ,**(parr),**(parr+1),**(parr+2));
return 0;
}
输出结果为:
1 2 3
1 2 3