【揭秘C语言】零基础也能懂!一篇文章带你掌握C语言指针核心知识点

C语言文章更新目录

C语言学习资源汇总,史上最全面总结,没有之一
C/C++学习资源(百度云盘链接)
计算机二级资料(过级专用)
C语言学习路线(从入门到实战)
编写C语言程序的7个步骤和编程机制
C语言基础-第一个C程序
C语言基础-简单程序分析
VS2019编写简单的C程序示例
简单示例,VS2019调试C语言程序
C语言基础-基本算法
C语言基础-数据类型
C语言中的输入输出函数
C语言流程控制语句
C语言数组——一维数组
C语言数组——二维数组
C语言数组——字符数组
C语言中常用的6个字符串处理函数
精心收集了60个C语言项目源码,分享给大家
C语言核心技术——函数
C代码是怎样跑起来的?
C语言实现字符串的加密和解密
C语言——文件的基本操作
使用C语言链表创建学生信息并且将信息打印输出
图解C语言冒泡排序算法,含代码分析
实例分析C语言中strlen和sizeof的区别
开发C语言的3款神器,VS2019、VScode和IntelliJ Clion
动图图解C语言选择排序算法,含代码分析
动图图解C语言插入排序算法,含代码分析
C语言指针数组和数组指针详解
5分钟搞懂C语言中的传值和传址
C语言——动态数组的创建和使用
C语言中#include<…>和#include“…“的区别
2024年C语言最新经典面试题汇总(1-10)
2024年C语言最新经典面试题汇总(11-20)
C语言中如何动态分配内存并进行操作
如何在C语言中使用命令行参数

C语言实例专栏(持续更新中…)

正文

C语言指针是C语言中最重要的部分之一,也是初学者比较难以理解的概念之一。本文将为大家详细解说C语言指针的相关知识。

  1. 指针的基本概念

    • 指针的声明与初始化:声明一个指针时,我们不仅指定指针的类型,还表明它能存储哪种类型变量的地址。
      例如,int *p; 声明了一个可以存储整型变量地址的指针 p
      初始化指针,比如 int x = 10; int *p = &x;,这里 p 被赋予了变量 x 的内存地址,可以用 *p 来访问 x 的值。
    • 空指针:在C语言中,NULL(void*)0 表示空指针,代表指针不指向任何有效地址。声明和初始化为空指针有利于预防未初始化指针引发的问题。
  2. 指针的解引用

    • 读取值:通过 *指针名 的方式解引用指针,可以从内存中读取值。例如 int val = *p;p 指向的内存地址处的整数值赋给 val
    • 写入值:通过 *指针名 = 值 的方式可以修改指针指向内存地址处的值。例如 *p = 20;20 写入 p 指向的内存地址。
  3. 指针运算

    • 指针加减:对于指向数组的指针,执行加减运算时,它并非简单地加减数字,而是根据指针类型自动调整偏移量,使其按相应类型长度跳转。例如,对于 int *pp + 1 实际上使指针移动到数组中下一位整数的位置。
    • 关系运算:同类型的指针可以进行相等性和顺序性的比较。例如,如果 pq 都指向同一个数组内的元素,则 p < q 可以判断 p 是否在 q 之前。
  4. 指针与数组

    • 数组名作为指针:在C语言中,数组名可被当作指向数组首元素的常量指针,但它不可被重新赋值。例如,数组 int arr[5]; 中,arr 可视作 int *const arrarr + i 实际上是对数组元素的偏移访问。
    • 指针遍历数组:通过让指针从数组首地址开始,每次递增指针来遍历整个数组,这是一种常见的高效遍历方式,因为指针自增相当于按元素类型长度移动。
  5. 指针与字符串

    • 在C语言中,字符串实际上是字符数组,最后一个字符为’\0’作为结束标记。例如,char *str = "Hello"; 中,str 指向字符串的第一个字符 ‘H’。通过递增指针 str++,我们可以依次访问后续字符直至遇到 ‘\0’。
  6. 指针与函数

    • 传址调用:在函数调用中,通过传递变量的地址而不是复制变量的值,可以让函数直接修改原始变量的值。例如,void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } 可以交换两个整数的值。
    • 返回指针:函数可以返回指向动态分配内存或静态/全局变量地址的指针。例如,char *getStr() { char str[] = "Example"; return str; } 返回一个指向字符串常量区的指针,但由于是局部变量,这样返回可能会导致未定义行为。
  7. 动态内存分配

    • 使用 malloc()calloc()realloc() 函数可以动态分配内存,这些函数会返回指向新分配内存区域的指针。如 int *ptr = (int*)malloc(5 * sizeof(int)); 会分配可以存储5个整数的空间。当不再需要这块内存时,必须使用 free(ptr); 来释放,否则会导致内存泄漏。
  8. 多级指针

    • 多级指针是指一个指针指向另一个指针的情况。例如,int **pp 是一个指向 int * 类型指针的指针。在实际应用中,多级指针常见于处理二维数组、指针数组或链表等场景。
  9. 结构体与指针

    • 结构体指针可以用来操作结构体实例。声明一个指向结构体类型的指针并初始化,如 struct Student *stu = malloc(sizeof(struct Student)); 之后,可以通过解引用或箭头操作符 (->) 访问结构体成员。例如,(*stu).agestu->age 可以访问 age 成员。此外,结构体内部成员也可以是其他结构体或指针类型,此时可以声明指向结构体内部指针成员的指针。
  10. 总结
    C语言中的指针是程序设计的强大工具,能够极大地提高程序效率,同时也增加了程序设计的复杂性,要求开发者对其有深入理解和谨慎使用。指针的正确使用可以帮助解决很多实际编程问题,但也容易成为错误的来源,因此在编写涉及指针的代码时应格外小心。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/772258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 python 拆分 excel 文件

文章目录 1、安装环境2、脚本 split.sh3、运行脚本 1、安装环境 brew install python3 python3 -m venv my_pandas_venv source my_pandas_venv/bin/activate pip install pandas2、脚本 split.sh #!/bin/bash# 检查 Python3 和 pandas 库是否已安装 if ! command -v python3…

Learn OpenGL 30 SSAO

SSAO 我们已经在前面的基础教程中简单介绍到了这部分内容&#xff1a;环境光照(Ambient Lighting)。环境光照是我们加入场景总体光照中的一个固定光照常量&#xff0c;它被用来模拟光的散射(Scattering)。在现实中&#xff0c;光线会以任意方向散射&#xff0c;它的强度是会一…

OpenCV基础demo

一、读取图像 //图片路径QString appPath = QCoreApplication::applicationDirPath();QString imagePath = appPath + "/sun.png";//读取图像cv::Mat img = cv::imread(imagePath.toStdString()); //IMREAD_GRAYSCALE 灰度图 IMREAD_UNCHANGED 具有透明通道if (img.e…

C++ STL - 优先级队列及其模拟实现

目录 0. 引言 1. priority_queue 介绍 1.1 构造函数 1.2 priority_queue 接口函数使用 1.3 仿函数 1.4 题目练习 2. priority_queue 模拟实现 2.1基本框架&#xff1a; 2.2 默认构造函数 2.3 基本函数 2.4 堆的向上以及向下调整 0. 引言 优先队列 (priority_queu…

【剑指offr--C/C++】JZ22 链表中倒数最后k个结点

一、题目 二、思路及代码 遍历链表并存入vector容器&#xff0c;通过下标取出对应位置元素或者返回空 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ #include <cstddef> #include <iterator> #…

【微服务】接口幂等性常用解决方案

一、前言 在微服务开发中&#xff0c;接口幂等性问题是一个常见却容易被忽视的问题&#xff0c;同时对于微服务架构设计来讲&#xff0c;好的幂等性设计方案可以让程序更好的应对一些高并发场景下的数据一致性问题。 二、幂等性介绍 2.1 什么是幂等性 通常我们说的幂等性&…

【Entity Framework】 EF三种开发模式

【Entity Framework】 EF三种开发模式 文章目录 【Entity Framework】 EF三种开发模式一、概述二、DataBase First2.1 DataBase First简介2.2 DataBase First应用步骤2.3 DataBase First总结 三、Model First3.1 Model First简介3.2 Model First实现步骤 四、Code First4.1 Cod…

全市场都忽视了!大摩:数据中心算力成本正在迅速下降

随着AI技术迈入普及与应用的新纪元&#xff0c;其算力需求蓬勃增长的同时&#xff0c;算力成本随技术进步呈现下降趋势。 摩根士丹利在3月24日的AI报告中指出&#xff0c;随着GPU技术的不断进步&#xff0c;例如英伟达从Hopper发展到Blackwell GPU架构&#xff0c;GAI的算力成…

怎么做到高效阅读、高效输出?

每一位得到的用户都是终身学习者&#xff0c;你一定对读书这件事不陌生。但是&#xff0c;并不是每个人都清楚&#xff0c;应该用什么标准选书&#xff0c;又怎么把一本书变成自己的精神资产。而这件事&#xff0c;陈章鱼特别擅长。 今天&#xff0c;我和陈章鱼一起挑选了4个有…

ChatGPT 对 ELT的理解

本文主要内容来自 ChatGPT 4.0 到底什么是 ETL&#xff1f;在数据库内部&#xff0c;把数据从 ODS 层加工成 DWD&#xff0c;再加工成 DWS&#xff0c;这个过程和 ETL 的关系是什么&#xff1f;带着这些问题&#xff0c;我问了一下 ChatGPT&#xff0c;总结如下。 数据在两个数…

线程安全介绍

线程安全的出现&#xff1a; 当两个或以上的线程同时操作一个共享变量时&#xff0c;就会涉及线程安全问题&#xff0c;不然会导致最后结果并不是我们所需要的。 线程安全定义&#xff1a; 线程安全&#xff08;Thread Safety&#xff09;是指一个对象或代码块在多线程环境中…

AWS EC2设置root登录

在使用亚马逊的服务器时&#xff0c;官方默认是使用密钥登录&#xff0c;跟国内的云服务器差别较大&#xff0c;本文记录下&#xff0c;如何开放AWS EC2的root登录。 一、通过网页版或者XShell登录服务器 这里略过 二、设置root账户密码 # 切换 root sudo -i # 设置或修改密…

【408直通车】(考研数一、二、三合集)线性代数公式全覆盖

线性代数 行列式: ∣ A B ∣ ∣ A ∣ ∣ B ∣ ∣ B ∣ ∣ A ∣ ∣ B A ∣ |AB| |A||B| |B||A| |BA| ∣AB∣∣A∣∣B∣∣B∣∣A∣∣BA∣ ∣ k A ∣ k n ∣ A ∣ |kA| k^n |A| ∣kA∣kn∣A∣ ∣ A T ∣ ∣ A ∣ |A^T| |A| ∣AT∣∣A∣ ∣ A − 1 ∣ ∣ A ∣ −…

静态住宅IP VS 动态住宅IP,怎么选择?

在进行海外 IP 代理时&#xff0c;了解动态住宅 IP 和静态住宅 IP 的区别以及如何选择合适的类型非常重要。本文将介绍精态住宅 IP 特点和&#xff0c;并提供选择建议&#xff0c;帮助您根据需求做出明智的决策。 静态住宅 IP 的特点 静态住宅 IP 是指 IP 地址在一段时间内保…

故障诊断 | 一文解决,CNN-BiLSTM卷积神经网络-双向长短期记忆神经网络组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,CNN-BiLSTM卷积神经网络-双向长短期记忆神经网络组合模型的故障诊断(Matlab) 模型描述 CNN-BiLSTM卷积神经网络-双向长短期记忆神经网络组合模型是一种深度学习模型,结合了卷积神经网络(CNN)和双向长短期记忆网络(BiLSTM)的优点…

CBLUEbenchmark代码跑通

CBLUEbenchmark 跑通 github源地址 1.配置 数据下载 新建文件夹CLBUEDatasets,将数据放在该文件夹下模型下载到github源地址中选择一个模型来下载: 将下载好的模型放在一个专门放模型的文件夹下&#xff0c;我这里是bert 文件如下所示放置&#xff1a; 2.训练模型&#xff…

宁德时代与特斯拉合作;钟睒睒连续四次中国首富丨 RTE 开发者日报 Vol.171

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、…

用java做一个双色球彩票系统

代码如下&#xff1a; import java.util.Random; public class HelloWorld{public static void main(String[] args){//1、生成中奖号码 int[] arrcreateNumber();for (int i 0;i<arr.length;i) {System.out.print(arr[i]" ");}}public static int[] createNu…

OJ刷题:字符串中的第一个唯一字符

力扣第387题&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给定一个字符串 s &#xff0c;找到 它的第一个不重复的字符&#xff0c;并返回它的索引 。如果不存在&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入: s "leetcode"…

全自动引流,每日500+粉丝的秘诀

在如今竞争激烈的市场环境下&#xff0c;如何有效地吸引和保持精准粉丝成为了每个企业主或网红必须面对的问题。然而&#xff0c;许多人可能误以为全自动引流就意味着无人参与&#xff0c;实际上&#xff0c;它更多的是借助一些自动化工具和策略来提升我们的工作效率。今天&…