目录
一.指针理解
1.指针是一种类型,可以定义指针类型的变量。
2.指针就是内存地址,指向内存空间。
3.指针即指针变量。
指针的重要关注点:
两种类型:指针本身类型,指针指向类型。
示例1:int a = 10; int *p = &a;
此时指针p本身类型为int,指向类型为int
示例2:int a = 10; char *p = &a;
此时指针本身类型为char,指向类型为int
两种大小:指针的大小,所能访问的指向空间大小。
char *p; int *p; short *p; float *p; .........
指针大小:sizeof(p)
在32位下,指针的大小位4个字节,在64位下,指针的大小位8个字节。
所能访问的指向空间大小:sizeof(*p)
随指针自身类型的不同而不同。
两种特殊指针:
1.字符指针:char * C语言保存字符串:char str[] = "Hello“;
C语言中不存在字符串类型,C语言针对使用字符数组模拟实现字符串,但是字符串的操作与字符数组的操作又有所不同。
字符串末尾会默认带有结尾标志 "\0" (等价于数字0,与字符0区分)。
针对字符串的所有操作都是以结尾标志作为标识。
针对字符串的操作,只需要将字符串的首地址空间获取到,系统中的字符串操作函数会自动获取到字符串的每一个数据,直至取得“\0"结束操作。
char str1[] = "abc"; char str2[] = "abc";
char *ptr1 = "abc"; char *ptr2 = "abc";
str1 == str2 : 比较两个字符串的首地址,此时两字符串仅内容相同,但两个字符串的地址并不相同,故结果为false。
ptr1 == ptr2:两个指针变量中存储的为”abc"该常量字符串的地址,故两个指针变量相等,结果为true。
ps:字符串给指针进行初始化赋值时,实际上赋值的是常量字符串的地址,字符数组进行字符串的初始化赋值时,赋值的是字符串的内容。
字符串的输出,可以采用%s直接传入首地址进行输出,但其他类型的数组需要进行遍历输出。
char str[] = "abcdef";
printf("%s",str);
2.无类型指针:void*
void是为无类型,通常用于定义函数的返回值类型或者或参数类型表示没有返回值或参数。
void*是无类型指针,通常用于表示无关大小,只关心指向的指针类型。
二.指针数组
指针数组本质为一个数组,数组的每个元素为指针。
定义规则:int *parr[10]; 数据类型 * 数组名[数组元素个数];
定义了一个parr变量,首先于[]结合,表明其为一个数组,之后与*结合,表示数组的每个元素为指针,最后与最前表的int结合,表示每一个元素指向的为int类型。
三.数组指针
数组指针本质为一个数组,指向类型为一个数组。
定义规格:int (*parr)[10]; 数据类型 (* 指针名)[指向数组元素个数];
parr是一个指针,指向一个具有10个整型元素的数组。