前言
前面已经带大家学习了初级的指针,先回顾一下重点:指针是用来存放地址的变量;指针的大小是4/8字节;指针类型决定了指针+-整数的步长和指针解引用的权限。这期继续探讨指针,相信你会有更加深入的理解。
目录
Part1:字符指针
Part2:指针数组
Part3:数组指针
1.定义
2.&数组名与数组名
3.使用
正文
Part1:字符指针
我们知道指针是有类型的,其中一种是字符指针类型 char*
❓那么字符指针是如何指向字符的呢?接下来带大家探讨:
一般的使用:
int main() { char ch = 'e'; char* pc = &ch; *pc = 'e'; return 0; }
这种就是指针 pc 指向 字符 e
还有一种使用方法:
int main() { const char* pstr = "Hello world"; printf("%s\n", pstr); return 0; }
👁️🗨️运行结果:
❓提问:pstr 是指向 Hello world 整体吗?
实际上并不是的
而是把字符串 Hello world 的首字母 H 的地址存放到 pstr 中了:
下面有一道题,以加深理解:
int main() { char str1[] = "Hello world"; char str2[] = "Hello world"; const char* str3 = "Hello world"; const char* str4 = "Hello world"; if (str1 == str2) printf("str1 and str2 are same\n"); else printf("str1 and str2 are not same\n"); if (str3 == str4) printf("str3 and str4 are same\n"); else printf("str3 and str4 are not same\n"); return 0; }
👁️🗨️输出结果:
解释:
str1 和 str2 是分别开辟的两个数组,用相同的常量字符串去初始化两个数组,也是会开辟出不同的内存块。所以 str1 与 str2 不同。
C/C++会把常量字符串存储到单独的一个内存区域,str3 和 str4 指向的就是同一个常量字符串,所以 str3 和 str4 相同。
Part2:指针数组
这一部分在指针初级提到了,这里回顾一下:
指针数组本质是什么?
答:数组。
以下的指针数组是什么意思?
1. int* arr1[3]; 2. char* arr2[2]; 3. char** arr3[1];
答:
int* arr1[3]; --- 存放一级整型指针的数组
char* arr2[2]; --- 存放一级字符指针的数组
char** arr3[1]; --- 存放二级字符指针的数组