💓博主CSDN主页:杭电码农-NEO💓
⏩专栏分类:C语言学习分享⏪
🚚代码仓库:NEO的学习日记🚚
🌹关注我🫵带你学习更多C语言知识
🔝🔝
1. 前言
本篇文章将讲解以下几个方面内容:
- 字符指针
- 数组指针
- 指针数组
- 数组传参和指针传参
- 函数指针
在这之前先温故一下指针的概念:
点击即可跳转: 指针初阶
2. 字符指针
字符指针就是指向字符型变量地址的变量
比如:
char ch = 'w'; char *pc = &ch; *pc = 'a';
pc是指向变量ch地址的指针
解引用pc: *pc等价于ch
所以使用 *pc='a’可以修改ch的值
2.1 常量字符串
新内容: 常量字符串
请看以下代码:
char* pstr = "hello NEO-kou";
"hello NEO-kou"被称为常量字符串
众所周知,指针变量的大小是4/8个字节
然而这段字符串有13个字节,所以:
明显这段字符串不存储在这个指针变量中
2.2 常量字符串存储的位置
那么它存储在什么位置?
引出一个新概念: 代码区
我们把内存大致划分为这几个区域:
常量字符串被存储在代码区
而指针pstr指向这个代码区的常量字符串
字符串"hello NEO-kou"的地址就是
第一个字母’h’的地址.
相当于pstr中存放的是字符’h’的地址
3. 数组指针
数组指针可以和其他类型的指针类比:
- 整型指针:存放整型变量地址的指针变量
- 字符型指针:存放字符型变量地址的指针
…
同理得数组指针:
存放数组地址的指针变量
举个例子:
int a[6] = {1,2,3,4,5,6}; int (*p)[6] = &a;//p存放数组a的地址
这段代码可以这样理解:
注意,不能这样写:
int *p[6] = &a;
因为 [ ] 的优先级高于星号 *
不加括号的话p会先和[ ]结合
先与[ ]结合的话,p就不是一个指针了!