数据类型: 指针类型
1.基本数据类型
整型
实型
字符型
布尔型
字符串
枚举类型
2.构造类型
数组
结构体
联合体
3.指针类型
指针是一种特殊的数据类型,存储是 不是一个具体的数值,非数值数据,是内存地址。
3.1 指针类型的变量
一般格式 类型标示符* 变量名;
类型标示符指的是指针变量保存的内存地址中存储的数据的类型。
例如:int * point;//0xfff423c40
指针类型的变量如何初始化
1.int *p = NULL;//0x0 空指针,有意思的,不是野指针。但是如果声明指针变量时不给指针变量进行初始化就有可能造成野指针。
2.给指针类型的变量赋初始值
int *p = &a;
就相当于把变量a在内存中的首地址赋值给指针类型的变量p。
3.2 指针变量指向的变量
int a = 5;//变量a 整型 int a = 4;//占4个字节
变量
内存地址 <----------0000 0101
int * p = &a;//p->a 指针变量p中保存的地址是变量a在内存中的首地址。
3.3 &和*
& 寻址运算符 作用C语言充分相信程序员,所以给广大程序员能够操作内存的权利,怎么去操作取操作内存,& 寻址运算符,(取地址运算符),借助这个运算符咱们能够拿到变量、数组、函数等在内存中的首地址。
* 间接寻址运算符 ,用于从指针变量中保存的地址中取值。
例子:int *p=&a;//p中保存的a的地址
*p就相当于a的一个别名。
3.4、指针类型的变量的赋值和取值
赋值
int a=100,b=50;
int *p = &a;
p=&b;
取值
int a=100,b=50;
int *p = &a;
printf("a = %d\n",a);
printf("a = %d\n",*p);
3.5、指针和常量的关系
指针类型的常量 int *const p;
例如:钟停了
指针变量p中保存的地址是常量不能够修改。const限定符限定的变量不能被修改。就近原则const p;p中存储的地址是一个常量不能修改。
指针指向的常量 int const*p;
表示的是指针变量p中保存的地址是可以被修改的,但是不能通过*p取修改指针指向的变量的值。
int const *p=&a; 不能使用*p修改a的值。但是p可以指向a以外的变量p=&b;依然不能通过*p修改b的值。
3.6、指针和数组的关系
指针类型的数组 int *p[];char *p[];
表示的是一个数组,每一个数组元素保存的都是一个整型变量的地址。
指向数组名的指针变量 int (*p)[];
用指针做参数传递数组
void sort(int A[],int n);
void sort(int *A,int n);
void show(int **A,int m,int n);
3.7、指针和函数的关系
1.返回值类型是指针的函数(指针函数)
char * strcat(char *s,const char *s1);
2.函数指针
int (*p)();
例如:void (*signal(int sig,void (*func)(int)))(int);
函数名:signal 信号函数
参数 :int sig,void(*func)(int)
返回值: void (*signal)(int);
3.8、指针和字符串的关系
字符指针 char *p = "Hello World!";
指针数组做字符串数组 char *p[10] = {"111","222"};
指针做参数传字符串 char *strcat(char *s,const char *s1);
3.9、指针和指针的关系
3.10、指针和结构体的关系
3.11、指针和链表
3.12、文件指针
4.空类型
5.自定义类型