数组指针和指针数组

指针数组(数组中的元素是指针变量)

定义 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

数组指针, 指针的步长是数组占用内存长

二者都可以视为类二维数组, 只是前者每一维数组长度不一致, 后者长度一致

指针数组和二级指针是相同的结构, 二者每一维的长度都可以不相同, 那二者是否可以认为是等价的???

posted @ 2022-09-25 10:45  車輪の唄  阅读(21)  评论(0编辑  收藏  举报  来源