【C语言】指针详解(接)
前言:
文接上章,在上章节讲解了部分指针知识点,在本章节为大家继续提供。
六·指针与字符串:C 语言字符串的本质
在 C 语言中,字符串实际上是一个以\0结尾的字符数组。字符串常量本质上是指向字符数组首元素的指针:
char *str = "Hello, World!"; // 字符串常量存储在只读内存区 printf("%s\n", str); // 输出Hello, World! printf("首字符:%c\n", *str); // 输出H printf("第3个字符:%c\n", *(str + 2)); // 输出l
动态分配字符串:
#include #include #include int main() { char *str = (char *)malloc(20 * sizeof(char)); // 动态分配20字节内存 if (str == NULL) { printf("内存分配失败\n"); return 1; } strcpy(str, "Dynamic String"); // 复制字符串到分配的内存 printf("%s\n", str); // 输出Dynamic String free(str); // 释放内存,防止内存泄漏 return 0; }
malloc函数在内存函数中讲解过,想要详细了解的可以点开主页,看一下文章。
七·多级指针:指针的指针
指针变量本身也有自己的内存地址,因此可以定义指向指针的指针(多级指针):
int num = 10; int *p = # // 一级指针,指向int int **pp = &p; // 二级指针,指向int* int ***ppp = &pp; // 三级指针,指向int** printf("num的值:%d\n", ***ppp); // 解引用三次,输出10
多级指针常用于需要修改一级指针本身的场景,比如动态分配二维数组:
int **matrix; int rows = 3, cols = 4; // 分配行指针数组 matrix = (int **)malloc(rows * sizeof(int *)); for (int i = 0; i八·常见指针错误
野指针:未初始化的指针
int *p; *p = 10; // 错误!p指向随机地址空指针解引用:
int *p = NULL; *p = 10; // 错误!解引用空指针内存泄漏:动态分配的内存未释放
int *p = (int *)malloc(sizeof(int)); // 使用p // 忘记free(p)九·总结
- 指针变量存储的是内存地址
- 通过解引用操作符*可以访问和修改内存中的数据
- 指针算术允许在内存中移动
- 指针是实现数组、字符串、动态内存分配和复杂数据结构的基础
- 使用指针时必须特别注意内存管理和避免常见错误
(图片来源网络,侵删)(图片来源网络,侵删)(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。