【C语言进阶】指针进阶 —— 指针回顾与字符指针
正文:
本章目标:
复习指针的基本内容,学习并掌握数组指针、指针数组、函数指针、函数指针数组、以及回调函数等概念。
本章重点:
1.字符指针
2.数组指针
3.指针数组
5.函数指针
6.函数指针数组
8.回调函数
10.指针笔试题详解
指针回顾
指针的主题,在C语言初阶《指针》部分就已经接触过。
- 指针变量用来存放对象的地址。地址唯一标识一块内存单元(内存会划分为一个个小的内存单元,每个内存单元都有唯一的地址编号)。
- 指针变量的大小是固定的4/8个字节(32位平台/64位平台)。
- 指针变量是有类型的,指针变量的类型决定了指针±整数的步长,指针变量进行解引用时的权限(能够访问多少个字节)。
- 指针的运算(指针±整数、指针-指针、指针的关系运算)。
一、字符指针
指针变量指向对象的类型为字符型
char
,指针变量的类型为char*
。
1 示例1
代码示例:
#include<stdio.h>
int main()
{
//字符指针
char ch = 'w';
char* pc = &ch;//pc是字符指针
*pc = 'a';
return 0;
}
解释说明:
1 指针变量 pc
指向字符型变量 ch
。
2 ch
与 *pc
管理的是同一段内存空间。
2 示例2
代码示例:
#include<stdio.h>
int main()
{
//字符指针的其他使用方法
const char* pstr = "hello wdt.";//指针变量存放的是字符串的首字符地址
printf("%s\n", pstr); //hello wdt.
printf("%c\n", *pstr); //h
return 0;
}
解释说明:
1 const char* pstr = "hello wdt.";
常量字符串 "hello wdt."
存放在代码段;而指针变量 pstr
存放的是该字符串首字符 h
的地址。
2 字符指针存储的是常量字符串首字符的地址:
3 示例代码的意思是把一个常量字符串的首字符 h
的地址存放在指针变量 pstr
中。
3 示例3
代码示例:
#include<stdio.h>
int main()
{
//字符数组与字符指针
//创建字符数组存放字符,开辟不同的内存块,数组空间独立
char str1[] = "hello wdt.";
char str2[] = "hello wdt.";
//字符指针存放常量字符串的首字符地址
const char* str3 = "hello wdt.";
const char* str4 = "hello wdt.";
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;
}
解释说明:
1 用字符串来初始化字符数组,不同的数组开辟不同的内存空间,占用不同的内存块,拥有不同的地址。
2 常量字符串存储在常量区,只创建一次,不同的字符指针存放同一常量字符串首元素的地址。
注意:
1 C/C++ 会把常量字符串存储到单独的一个内存区域,当多个指针变量指向同一个字符串的时候,它们实际指向的是同一块内存。
2 用相同的常量字符串去初始化不同的数组的时,会开辟出不同的内存块,只是存储的元素相同罢了。
总结:
本节给出了指针进阶的目标与重点;对指针进行了简单的回顾;讲解了字符数组与字符指针的使用。
感谢您的阅读!如有任何错误,欢迎您的批评指正!