9.指针
1.return和exit
(1).return:中断函数,结束main函数,程序结束。
(2).#include<stdlib.h>;exit:结束整个程序;
2.函数声明和定义
调用函数前需要声明。
形参变量名可以不写,可以只写类型,可以只写类型,定义时,形参变量名一定要写。
3.分文件编程
按功能分文件编程。
4.指针
(1).指针也是一种数据类型;
(2).指针指向谁,就把谁的地址赋值给指针;
(3).需要操作*p,操作指针所指的内存;
(4).定义变量时,*代表是类型,它是指针类型int *;
(5).在使用变量时,*代表操作指针所指向的内存。
5.野指针
指针变量保存了没有意义的地址;
(1).只有定义了变量的内存,才是合法的地址。
(2).操作野指针变量没有任何问题。
(3).操作野指针所指向的内存才会段错误。
6.空指针
空指针,给指针变量赋值为NULL;
7.指针的大小
32位编译器用32位大小(4字节)保存地址;
64位编译器用64位大小(8字节)保存地址;
8.多级指针
9.[]
*p等价于*(p+0),同时等价于p[0];
*p等于p[0],操作的是指针所指向的内存。
10.void指针
(1).不可以定义void类型的普通变量,不能确定类型;
(2).可以定义void *变量,void指针;
(3).void可以指向任何类型的变量,使用指针所指向的内存时,最好转换为它本身的指针类型;
11.const修饰
int const *p = &a;
const修饰*,代表指针所指向的内存只读。
int * const p = &a;
const修饰指针变量,代表变量值为只读。
12.数组名
数组名是数组首元素地址;
数组名是常量,不允许修改;
p指针变量指向首元素。
13.指针变量的加减
14.二级指针
假设srt首元素时char *类型:
&str[0],代表首元素的地址,str等价于&str[0];
char *str[ ] = {"abc","cde","ijk"}; char **p = str; //char **指向char * char **p = &str[0];
如果char *str[]作为函数参数,可以改为char **str:
void fun(char **p)
以下三个情况等价:编译器都是当做**p处理!
void fun(char **p); void fun(char *p[]); void fun(char *p[100]);