前言

在C语言中,指针是一项重要的概念,它允许我们直接访问和操作内存地址。

可以说,指针是C语言一大优势。用得好,你写程序如同赵子龙百万军中取上将首级;用得不好,则各种问题层出不穷,有种双拳难敌四手的感觉。

本文将介绍指针的基础知识,包括指针的定义、初始化、访问和运算。

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

  • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、指针的基本概念

指针是一种变量,它存储的是内存地址而不是实际的值。

通过指针,我们可以直接访问和操作内存中存储的数据。下面是指针的基本概念:

int* ptr;  // 声明一个指向整数的指针

在上面的示例中,我们声明了一个名为ptr的指针变量,它可以指向整数类型的数据。

指针变量的类型必须与其指向的数据类型相匹配。

三、声明和初始化指针

要声明指针变量,我们需要使用*符号来指示该变量是一个指针。下面是指针的声明和初始化示例:

int* ptr;    // 声明一个指向整数的指针
int num = 10; // 声明一个整数变量 ptr = # // 将指针指向num变量的地址

在上面的示例中,我们声明了一个指向整数的指针ptr,然后将其初始化为变量num的地址,使用&运算符可以获取变量的地址。

四、访问指针和间接引用

通过指针,我们可以访问和修改其指向的变量。使用指针访问变量的值称为间接引用或解引用操作。

下面是访问指针和解引用的示例:

int* ptr;
int num = 10; ptr = # printf("变量num的值:%d\n", *ptr); // 输出:变量num的值:10 *ptr = 20; // 修改变量num的值 printf("变量num的新值:%d\n", num); // 输出:变量num的新值:20

在上面的示例中,我们使用*ptr来访问指针所指向的变量num的值,并可以对其进行修改。

五、指针的运算

指针支持一些特定的运算,使得我们能够在内存中进行定位和遍历。

以下是指针的常见运算:

  • 指针的自增和自减运算:使用自增和自减运算符可以将指针移动到下一个或上一个内存位置。
int* ptr;
int nums[] = {1, 2, 3, 4, 5}; ptr = nums; // 指针指向数组的第一个元素 printf("第一个元素的值:%d\n", *ptr); // 输出:第一个元素的值:1 ptr++; // 指针自增,移动到下一个元素 printf("第二个元素的值:%d\n", *ptr); // 输出:第二个元素的值:2
  • 指针之间的相减运算:可以对两个指针进行相减运算,得到它们之间的距离(以元素个数为单位)。
int* ptr1;
int* ptr2;
int nums[] = {1, 2, 3, 4, 5}; ptr1 = nums; // 指针1指向数组的第一个元素
ptr2 = &nums[3]; // 指针2指向数组的第四个元素 int distance = ptr2 - ptr1; printf("两个指针之间的距离:%d\n", distance); // 输出:两个指针之间的距离:3

通过以上示例,我们可以看到指针的自增、自减和相减运算的应用,它们在遍历数组和计算距离等场景中非常有用。

六、示例代码

下面是完整的示例代码,用于加深对指针的理解,巩固前面所学的知识:

#include <stdio.h>

int main() {
int num = 10;
int* ptr = &num; printf("变量num的值:%d\n", *ptr);
*ptr = 20;
printf("变量num的新值:%d\n", num); int nums[] = {1, 2, 3, 4, 5};
int* p = nums;
printf("第一个元素的值:%d\n", *p);
p++;
printf("第二个元素的值:%d\n", *p); int* p1 = nums;
int* p2 = &nums[3];
int dist = p2 - p1;
printf("两个指针之间的距离:%d\n", dist); return 0;
}

小结

通过这篇文章,我们学会了

1、指针的基本概念

2、指针的基本用法

欢迎各位 点赞 收藏 评论,如有错误请留言指正,非常感谢!

逍遥自在学C语言 | 指针的基础用法的更多相关文章

  1. 没事抽空学——c语言指针操作基础概念

    指针基础 理解指针的最佳方法是画图,学习使用基本指针,不要产生空指针. 存储控件分配 存储控件分配是指在内存预留空间的过程.就像一个虚拟菜谱一样,指针对应菜名,其所指的内存空间中的数据对应实际的菜. ...

  2. 逍遥自在学C语言 | 第一个C语言程序 九层之台起于垒土

    一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位上场的是和我们一起学习的小白程序猿 -- 逍遥. 二.C语言简介 C语言是一种高级语言,运行效率仅次于汇编,支持跨平 ...

  3. Unity 3D开发-C#脚本语言的一些基础用法

    Unity 中C#语言的一些基础用法 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Lerp -- 线 ...

  4. 逍遥自在学C语言 | 位运算符的基础用法

    前言 一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位上场的是和我们一起学习的小白程序猿 -- 逍遥. 二.构成和表达方式 位运算符是一组用于在二进制数之间进行操作 ...

  5. 逍遥自在学C语言 | 位运算符&的高级用法

    前言 在上一篇文章中,我们介绍了&运算符的基础用法,本篇文章,我们将介绍& 运算符的一些高级用法. 一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位 ...

  6. C语言指针的一些用法

    指针是C语言的灵魂,精华之所在.指针强大而危险,用得好是一大利器,用得不好是一大潜在危害.正是指针具有强大而又危险的特性,加上指针比较难,很多人用的不好,所以越是封装程度高的语言,越是没有指针的&qu ...

  7. 逍遥自在学C语言 位运算符 "|" 的5种高级用法

    前言 在上一篇文章中,我们介绍了&运算符的高级用法,本篇文章,我们将介绍| 运算符的一些高级用法. 一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位上场的是 ...

  8. 逍遥自在学C语言 | 位运算符^的高级用法

    前言 在上一篇文章中,我们介绍了|运算符的高级用法,本篇文章,我们将介绍^ 运算符的一些高级用法. 一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位上场的是和我们一 ...

  9. 逍遥自在学C语言 | 算数运算符

    前言 一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位上场的是和我们一起学习的小白程序猿 -- 逍遥. 二.算数运算符简介 C语言的算数运算符,是用来完成基本的算术 ...

  10. 逍遥自在学C语言 | 逻辑运算符

    前言 一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位上场的是和我们一起学习的小白程序猿 -- 逍遥. 二.构成和表示方式 逻辑运算符是用来比较和操作布尔值的运算符 ...

随机推荐

  1. NodeJS 实战系列:个人开发者应该如何选购云服务

    这文章至少值一千元,因为这是我保守估计花出去的冤枉钱(请自行脑补一个苦笑的 emoji) 文章中会穿插选择云服务的一些建议,当然也会提供一些"薅羊毛"的技巧.不过在此之前我们要想清 ...

  2. Hive 和 Spark 分区策略剖析

    作者:vivo 互联网搜索团队- Deng Jie 随着技术的不断的发展,大数据领域对于海量数据的存储和处理的技术框架越来越多.在离线数据处理生态系统最具代表性的分布式处理引擎当属Hive和Spark ...

  3. 更新pip遇到的问题及解决方法

    问题ython -m pip install --upgrade pip --user D:\APP\Anaconda3\python.exe: No module named pip解决方法 pyt ...

  4. Java内部类的使用介绍详解

    前言 在之前讲解static静态内部类时,就给大家简单说过内部类的概念.但实际上,内部类并不是那么简单,所以今天我们需要对内部类进行专门地讲解和学习. 全文大约 [6500]字,不说废话,只讲可以让你 ...

  5. GIL和池的概念

    1.GIL概念 1. 什么是GIL(为Cpython解释器) GIL本身就是一把互斥锁. 原理都一样. 都是让并发的线程同一时间只能执行一个 所以有了GIL的存在. 同一进程下的多个线程同一时刻只能有 ...

  6. boot-admin整合flowable官方editor-app源码进行BPMN2-0建模(续)

    boot-admin整合flowable官方editor-app源码进行BPMN2-0建模(续) 书接上回 项目源码仓库github 项目源码仓库gitee boot-admin 是一款采用前后端分离 ...

  7. Python全栈开发工程师 day57 jQuery

    二.jQuery样式操作标签样式操作<!DOCTYPE html><html lang="en"><head> <meta charset ...

  8. 深入理解python虚拟机:程序执行的载体——栈帧

    深入理解python虚拟机:程序执行的载体--栈帧 栈帧(Stack Frame)是 Python 虚拟机中程序执行的载体之一,也是 Python 中的一种执行上下文.每当 Python 执行一个函数 ...

  9. [Pytorch框架] 4.1 Fine tuning 模型微调

    文章目录 4.1 Fine tuning 模型微调 4.1.1 什么是微调 为什么要微调 迁移学习 Transfer Learning 二者关系 4.1.2 如何微调 4.1.3 注意事项 4.1.3 ...

  10. Pytorch-Vanilla Transformer的实现

    Vanilla Transformer 注意力提示 ​ 我们可以将是否包含自主性提示作为将注意力机制与全连接层或汇聚层区别的标准. ​ 定义外部输入至感官的信息为键-值,键是表征值的非自主提示,关注信 ...