“ [ ] ”的优先级要比“ * ”要高
指针变量
指针变量:是指存放地址的变量。
指针数组
指针数组是一种特殊都数组,指针数组的数组元素都是指针变量。指针数组的定义格式为:
类型名称 *数组名称 [ 数组长度 ]
例如:char* pf[3];
因为下标运算符 [ ] 的优先级高于指针运算符 “ * ”,上述定义等价于:char* (pf[3]);
说明 pf 是一个含有3个元素的数组,数组的元素为指向 char 型变量的指针变量。
不论指针数组是什么数据类型,指针数组的每个元素都用来保存一个地址值,地址都是unsigned int型变量,占用2个字节。所以 pf 的大小是,2*3 = 6个字节。
元素1 | 元素2 | 元素3 |
---|---|---|
Addr * | Addr * | Addr * |
指针数组定义后,可以使数组元素指向一个变量和其他数组的首地址。举例如下:
char *a[5]={"tan","li","cheng","fang","zheng"};
定义指针数组a,存放姓名,a有5个成员,即a[5]是包含5个指针元素的指针数组,5个指针中每个的值是该字符串的首地址,也就是说:
a[0]=字符’t’的地址
a[1]=字符’l’的地址
a[2]=字符’c’的地址
a[3]=字符’f’的地址
a[4]=字符’z’的地址
为何要这样?因为各个名字是字符串不是单个字符,也就是说它相当于二维数组
tan
li
cheng
fang
zheng
二、结构体二级指针
当数据类型(AVStream)是结构体的时候,想将结构体以数组的形式存放:
需要用到二级指针,如上图,一级指针 Address_a 是结构体的首地址,因为是结构体类型,Address_a + 1 的地址是结构体元素的地址,从而地址很难确定。这样就要用到二级指针,将一级指针赋值给二级指针,这样二级指针的地址 + 1,就可以用来存放,第二个结构体的一级指针。Adde_b 是二级指针存放在 stream[0],Adde_b +1 就是 stream[1]。