《c语言深度剖析》读书笔记(四)指针和数组

本文是自己读书的时候一些关于该书的重点及感悟

目录

 

1、指针

2、数组

3、指针和数组的关系

4、指针数组和数组指针

5、多维数据和多维指针

6、数组参数和指针参数

7、函数指针


1、指针

(1)指针,即存放内存地址的变量,长度固定,32位系统中长度为4,说白了就是寻址位数。当然,指针是变量,那么免不了被存取,当然就会有存放此指针的地址,用&p获取;

2、数组

(1)int a[5]; a 作为右值时其意义与&a[0]是一样,代表的是数组首元素的首地址,而不是数组的首地址。a不能作为左值

3、指针和数组的关系

(1)指针和数组之间没有任何关系!

指针就是指针,指针变量在 32 位系统下,永远占 4 个 byte,其值为某一个内存的地址。

指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到。

数组就是数组,其大小与元素的类型和个数有关。定义数组时必须指定其元素的类型

和个数。数组可以存任何类型的数据,但不能存函数。

(2)定义一个数组int a[5]={1,2,3,4,5}。 a,&a 的值是一样的,但意思不一样,a 是数组首元素的首地址,也就是 a[0]的首地址,&a 是数组的首地址,a+1 是数组下一元素的首地址,即 a[1]的首地址,&a+1 是下一个数组的首地址。

(3)定义和声明之间的区别,定义分配的内存,而声明没有。定义只能出现一次,而声明可以出现多次。

(4)extern char a[]与 extern char a[100]等价的原因。因为这只是声明,不分配空间,所以编译器无需知道这个数组有多少个元素。

4、指针数组和数组指针

(1)指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身

决定。它是“储存指针的数组”的简称。

数组指针:首先它是一个指针,它指向一个数组。在 32 位系统下永远是占 4 个字节,

至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。

A),int *p1[10]; 指针数组

B),int (*p2)[10]; 数组指针

5、多维数据和多维指针

(1)一级指针保存的是数据的地址,二级指针保存的是一级指针的地址。

6、数组参数和指针参数

(1)C 语言中,当一维数组作为函数参数的时候,编译器总是把它解析成一个指向其首元

素首地址的指针。

(2)函数本身是没有类型的,只有函数的返回值才有类型。

(3)main 函数内的变量不是全局变量,而是局部变量,只不过它的生命周期和全局变量一样长而已。全局变量一定是定义在函数外部的。

(4)C 语言中,当一维数组作为函数参数的时候,编译器总是把它解析成一个指向其首元素首地址的指针。

(5)C 语言中,当一维数组作为函数参数的时候,编译器总是把它解析成一个指向其首元素首地址的指针。这条规则并不是递归的,也就是说只有一维数组才是如此,当数组超过一维时,将第一维改写为指向数组首元素首地址的指针之后,后面的维再也不可改写。

7、函数指针

(1)使用函数指针的好处在于,可以将实现同一功能的多个模块统一起来标识,这样一来更容易后期的维护,系统结构更加清晰。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值