C专家编程(学习笔记)_第10章 再论指针

1.多维数组的内存布局

        多维数组在系统编程中并不常用。所以毫不奇怪的是,C语言并未像其他语言所要求的那样定义了详细的运行时程序来支持这个特性。单个元素的存储和引用实际上是以线性形式排列在内存中的。

2.指针数组就是iliffe向量

        数组必须用指向为字符串而分配的内存的指针进行初始化。

3.在锯齿状数组上使用指针

        如果声明一个字符串指针数组,并根据需要为这些字符串分配内存,将会大大节省系统资源。有些人把它称为“锯齿状数组”是因为它右端的长度不一。只要有可能,尽量不要选择拷贝整个字符串的方法,如果需要从两个不同的数据结构访问它,拷贝一个指针比拷贝整个数组快得多,空间也节省很多。另一个可能影响性能的因素是iliffe向量可能会使字符串分配于内存中不同的页面中。这就违反了局部引用的规则,并导致更加频繁的页面交换,具体如何取决于怎样访问数据以及访问的频度。

4.向函数传递一个一维数组

        需要一个约定来提示数组的长度,一般有两个基本方法:

       (1)增加一个额外的参数,表示元素的数目(argc就是起这个作用);

       (2)赋予数组最后一个元素一个特殊的值,提示它是数组的尾部。这个特殊值必须不会作为正常的元素值在数组中出现。

5.使用指针向函数传递一个多维数组

方法1:
my_function(int my_array[10][20]);
方法2:
my_function(int my_array[][20]);
类似:my_function(int (*my_array)[20]);
方法3:
my_function(char **my_array);
注意:只有把二维数组改为一个指向向量的指针数组的前提下才可以这样做!
方法4:
char_array[row_size*i+j]=...

6.使用指针从函数返回一个数组

       严格地说,无法直接从函数返回资格数组,但是,可以让函数返回一个指向任何数据结构的指针,当然也可以是一个指向数组的指针,记住,声明必须在使用之前。千万要注意,不能从函数中返回一个指向函数局部变量的指针。

7.使用指针创建和使用动态数组

       它的基本思路就是使用malloc()库函数来得到一个指向一大块内存的指针,然后像引用数组一样引用这块内存,其机理就是一个数组下标访问可以改写为一个指针加偏移量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值