当前位置: 首页 > news >正文

【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 <stdio.h>
#include <stdlib.h>
#include <string.h>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 Stringfree(str); // 释放内存,防止内存泄漏return 0;
}

malloc函数在内存函数中讲解过,想要详细了解的可以点开主页,看一下文章。 

七·多级指针:指针的指针

指针变量本身也有自己的内存地址,因此可以定义指向指针的指针(多级指针):

int num = 10;
int *p = &num;     // 一级指针,指向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 < rows; i++) 
{// 为每一行分配列元素matrix[i] = (int *)malloc(cols * sizeof(int));
}// 使用二维数组
matrix[0][0] = 100;// 释放内存
for (int i = 0; i < rows; i++) 
{free(matrix[i]);
}
free(matrix);

八·常见指针错误

野指针:未初始化的指针

int *p;
*p = 10; // 错误!p指向随机地址

空指针解引用

int *p = NULL;
*p = 10; // 错误!解引用空指针

内存泄漏:动态分配的内存未释放

int *p = (int *)malloc(sizeof(int));
// 使用p
// 忘记free(p)

 九·总结

 

  1. 指针变量存储的是内存地址
  2. 通过解引用操作符*可以访问和修改内存中的数据
  3. 指针算术允许在内存中移动
  4. 指针是实现数组、字符串、动态内存分配和复杂数据结构的基础
  5. 使用指针时必须特别注意内存管理和避免常见错误

 

 

 

相关文章:

  • vue发版html 生成打包到docker镜像进行发版
  • 《深度关系-从建立关系到彼此信任》
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 6】【bt_vendor_opcode_t 介绍】
  • Ad Hoc
  • 源的企业级网络安全检测工具Prism X(棱镜X)
  • flutter项目迁移空安全
  • 欧盟MID认证,助力全球新能源高效计量与管理
  • Seata 面试题解析
  • 软考 系统架构设计师之考试感悟3
  • ubuntu 安装上传的 ffmpeg_7.1.1.orig.tar.xz并使用
  • 深入理解 SELinux:通过 Nginx 和 SSH 服务配置实践安全上下文与端口策略
  • 动态规划-931.下降路径最小和-力扣(LeetCode)
  • 高端装备制造企业如何选择适配的项目管理系统提升项目执行效率?附选型案例
  • 制造企业生产数据分析全解析:5大类数据定义、分析方法与落地指南
  • 阿里通义实验室突破空间音频新纪元!OmniAudio让360°全景视频“声”临其境
  • 制造企业搭建AI智能生产线怎么部署?
  • C++:栈帧、命名空间、引用
  • 人工智能浪潮下,制造企业如何借力DeepSeek实现数字化转型?
  • 学习黑客小故事理解 Metasploit 的 Meterpreter
  • 酷派Cool20/20S/30/40手机安装Play商店-谷歌三件套-GMS方法
  • 网站 虚拟主机 操作系统/沈阳网络优化培训
  • 蛋糕公司网页设计模板/seo关键词推广
  • 廊坊网站建设/网页设计是干嘛的
  • 盐城网站建设制作工作室/信阳搜索引擎优化
  • 门户网站建设和运行保证的磋商文件/seo推广哪家公司好
  • 冷饮店怎么做网站/百度收录申请入口