1. 指针:(数据类型)
保存地址的数据类型;
2. 指针变量:(保存地址的变量)
指向p:保存p的地址
3. 变量的首地址:&变量名;
4. 指针的定义:
类型名 变量名;
类型名 * 变量名;(*表示指针变量);
(指针的计算=====类型名)
定义:先*,后变量名,后类型名。
Int -3 *-1 p -2 ;
5. 指针所占字节(数据类型)
在32位系统中,占4个字节;
6. 指针变量类型:(去掉变量名)
Int * * ppf ;
7. 指针定义结束后必须初始化,避免野指针;
8. 内存空间的访问:
直接访问:通过变量名的方式访问;
间接访问:通过地址的方式访问;
9. 取值运算符:*地址;和&是互逆运算;
10. 取址运算符:&变量名;(首地址)
11. 段错误:
操作非法的内存空间;(操作野指针);
使用系统未经分配给自己的内存空间;
12. 空指针NULL 宏定义为0
13. 指针初始化:=NULL;
14. *指针变量==等于变量名,而不是内存空间存放的常量;
int i=5, *p=&i;
*p=8; //正确,更改i的值。
答案:B.C
B: *p2不建议使用;查看非法内存空间;
D: *p2=*p1; 操作(写)非法内存空间;
15. 指针(地址)的运算(数组名的运算)
物理地址=绝对地址+地址偏移
P+i ===== p+i*sizeof(数据类型)
16. 数组元素的指针访问:
若P=arr; //p=&arr[0]
则:
*(P+i)==*(arr+i)==arr[i]==p[i]
无条件:arr[i]=====*(arr+i)
P[2]===*(p+2)==a[7]
17. 数组编程技巧:(连写)
int i , *p=&i ;
18. 函数:
返回值类型 函数名 (形参列表)
函数的入口: 形参;调用时分配内存空间)
参数传递:值传递;地址传递;
参数传递为副本模式,地址传递时若要需要加const
函数的出口:返回值;副本模式
19. GDB调试
1. 编译带调试参数的可执行文件。
2. 设置断点b 运行r
3. next 语句(n) ; step 单步 (s)
4,。退出q;
20. 函数的声明
形参变量名可省略;但是定义时不可缺省。
21. 二维数组名:(数组名是一个指针)
22. 技巧:
元素下标【】:隐含有*