向量
通过声明一维指针数组可以实现类似于二维字符数组的效果,其中每个指针都指向一个字符串。 该方法的声明为: char *pea[4]; (你能用阅读第三章声明的方法来理解这个声明的含义吗?)
这是C语言中最常见、最重要的数据结构。 称为向量。 这个交错数组用于存储字符串。
此类数组必须使用指向为字符串分配的内存的指针进行初始化。 可以在编译时使用常量初始值,以便在运行时动态分配。 动态分配有两种方法。 (图片)
当你看到像[i][j]这样的东西时,它可能是
整数[23][12];
整数*[23];
整数**;
整数(*)[12]。
编译器如何编译数组和指针参数
将数组传递给函数的方法:
将一维数组传递给函数:任何一维数组都可以用作函数的参数。 但是形参被重写为指向数组第一个元素的指针,因此需要一个约定来暗示数组的长度。 一般有以下三种方法:
将多维数组传递给函数:有四种方法。
1 直接传递数组。 void func(int pea[10][20]),这种方法有很大的局限性。 因为你不能传入peach[10][9]这样的数组。
2 省略第一维的长度。 void func(int pea[][20]) 或 void func(int (*pea)[20]); 但这与第一种方法有类似的局限性。
3 使用向量。 void func(int **pea); 请注意,仅当二维数组被重写为向量指针数组时。 主要用于字符串数组。 因为他们都有明确的结局。 另外还需要一个计数量,比如main函数的argc。
4 放弃多维数组的形式,提供自己的下标方法。 传入一个普通指针。 然后以这种方式在内部访问该数组:[i*+j]。 这时候就需要传入 和 。 使用这种方法,数组的长度和宽度必须是固定的。
总之,如果长度和宽度固定的话,以上方法都可以用。
但如果长宽不固定,一维数组可以用上面的方法求解。 二维数组中的字符串数组可以用向量的形式求解。 其他数组需要设置结束值,但很难做到统一完美。 对于三维及以上数组不能传递,只能拆分成一维数组等。
缺乏对将多维数组作为参数传递的支持是 C 语言的一个缺点。
缺点
更多关注:
使用指针从函数返回数组:无法返回局部变量。 (第二章已经讲了五种方法)
使用指针创建和使用动态数组:
使用和。 注意不要将 s 的返回值直接赋给字符指针。 因为如果函数失败,就会将指针的值改为NULL,这样原来的数据就会出错。