数组指针和指针数组
指针数组(数组中的元素是指针变量)
定义 int *p[n];
[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值
#include <stdio.h>
int main()
{
char *p1[5] = {
"轮子工厂厂长招亲!",
"身高不限",
"肤色不限",
"身材不限",
"只要你不嫌弃厂长丑帅丑帅的~"
};
int i;
for (i = 0; i < 5; i++){
printf("%s\n", p1[i]);
}
return 0;
}
我们将指针数组中的每个元素初始化为一个字符串,这里之所以可以这样写是因为一个指针可以使用 char *p = "sss" 的方式进行初始化,所以如果想初始化一个指针数组,就可以通过上面的方式进行。在打印输出中使用 p1[i] 而不是 *p1[i] ,*p1[i] 将取出的是字符串中的第一个字符,而不能打印整个字符串。执行上面的代码会得到如下的结果
轮子工厂厂长招亲!
身高不限
肤色不限
身材不限
只要你不嫌弃厂长丑帅丑帅的~
数组指针(也称行指针)
定义 int (*p)[n];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度
优先级:()>[]>*
指针数组, 指针的步长是指针内存长, 即long
数组指针, 指针的步长是数组占用内存长
二者都可以视为类二维数组, 只是前者每一维数组长度不一致, 后者长度一致
指针数组和二级指针是相同的结构, 二者每一维的长度都可以不相同, 那二者是否可以认为是等价的???