本文是自己读书的时候一些关于该书的重点及感悟
目录
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)使用函数指针的好处在于,可以将实现同一功能的多个模块统一起来标识,这样一来更容易后期的维护,系统结构更加清晰。