推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

c专家编程读书笔记 第十章 再论指针

   2023-06-30 网络整理佚名1340
核心提示:可以通过声明一个一维指针数组,其中每个指针指向一个字符串来取得类似二维字符数组的效果。这种数组必须用指向为字符串而分配的内存的指针进行初始化。数组和指针参数是如何被编译器编译的但是形参被改写成指向数组第一个元素的指针,因此需要一个约定来提示数组的长度。注意只有把二维数组改写成指向向量的指针数组才行。使用指针从函数返回一个数组:不能返回局部变量。注意不要把的返回值直接赋给字符指针。

向量

通过声明一维指针数组可以实现类似于二维字符数组的效果,其中每个指针都指向一个字符串。 该方法的声明为: char *pea[4]; (你能用阅读第三章声明的方法来理解这个声明的含义吗?)

这是C语言中最常见、最重要的数据结构。 称为向量。 这个交错数组用于存储字符串。

此类数组必须使用指向为字符串分配的内存的指针进行初始化。 可以在编译时使用常量初始值,以便在运行时动态分配。 动态分配有两种方法。 (图片)

当你看到像[i][j]这样的东西时,它可能是

整数[23][12];

整数*[23];

整数**;

整数(*)[12]。

编译器如何编译数组和指针参数

将数组传递给函数的方法:

将一维数组传递给函数:任何一维数组都可以用作函数的参数。 但是形参被重写为指向数组第一个元素的指针,因此需要一个约定来暗示数组的长度。 一般有以下三种方法:

c指针编程之道_c语言函数返回字符型指针_c专家编程对比c和指针

将多维数组传递给函数:有四种方法。

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,这样原来的数据就会出错。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON