C语言指针超详细讲解上篇

yizhihongxing

【C语言指针超详细讲解上篇】

一、指针的概念

指针变量是指保存地址的变量,即它的值就是一个地址。通过指针变量可以间接访问该地址处的数据。在C语言中,指针变量可以用来访问位于数组中的元素,也可以用来访问一段连续的数据。

二、指针变量的声明与初始化

指针变量的声明方式与普通变量不同,需要在变量名前面添加星号“*”符号。指针变量的初始化可以为该指针赋值为一个变量的地址,也可以将指针赋值为NULL,表示该指针不指向任何地址。

示例1:指针变量的声明与初始化

int *p; // 声明一个指向整型变量的指针
int a = 10;
p = &a; // 将指针p初始化为变量a的地址
printf("%d", *p); // 输出指针p所指向的值,即变量a的值(输出结果为10)

示例2:将指针赋值为NULL

int *p = NULL; // 将指针p赋值为NULL,表示该指针不指向任何地址
if (p == NULL) {
    printf("p指针为空指针");
}

三、指针的运算

指针可以进行指针运算,包括指针加、减法,以及指针之间的比较运算。

示例3:指针加法运算

int a[5] = {1, 2, 3, 4, 5};
int *p = a; // 将指针p指向数组a的首地址
printf("%d", *(p+2)); // 输出p指针指向的位置加2的值,即数组a中下标为2的元素的值(输出结果为3)

示例4:指针比较运算

int a[5] = {1, 2, 3, 4, 5};
int *p1 = &a[2];
int *p2 = &a[4];
if (p1 < p2) {
    printf("p1指针指向的地址比p2指针指向的地址小");
}

四、指针的传递

指针变量可以作为参数传入函数中,从而改变函数外部的变量的值。

示例5:指针传递

void swap(int *a, int *b) {
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int a = 10, b = 20;
    swap(&a, &b); // 传入指向a和b的指针,即可以改变函数外部的a和b的值
    printf("a=%d,b=%d", a, b); // 输出交换后的a和b的值(输出结果为a=20,b=10)
}

五、常量指针和指针常量

常量指针和指针常量是指针的两种常见形式:

  • 常量指针:指向常量的指针,即指针的指向不能再改变。
  • 指针常量:指针本身是常量,即指针变量不能再指向其他地址。

示例6:常量指针和指针常量的区别

int a = 10, b = 20;
const int *p1 = &a; // 常量指针,指针指向的值不能被修改
int *const p2 = &b; // 指针常量,指针本身不能被修改
*p2 = 30; // 可以通过*p2修改b的值
printf("b=%d", *p2); // 输出修改后的b的值(输出结果为30)

以上就是C语言指针超详细讲解上篇的内容,希望能对大家的学习有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言指针超详细讲解上篇 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Docker 容器生命周期 架构 以及和VM之间的差异详解

    Docker 容器生命周期架构以及和 VM 之间的差异详解 介绍 Docker 是一种开源的容器化平台,利用 Docker 可以轻松地构建、派生和管理容器化应用程序。Docker 容器化平台是基于 Linux 容器 (LXC) 和 cgroups 构建的,其能够优化服务器资源利用率和开发效率。Docker 容器是一个可运行的、自包含的应用程序,其中包含运行环…

    other 2023年6月27日
    00
  • Android中fragment与activity之间的交互(两种实现方式)

    ” + data, Toast.LENGTH_SHORT).show(); } }); }}“` 以上是两种在Android中实现Fragment与Activity之间交互的方式,你可以根据具体的需求选择适合的方式来实现交互。希望对你有所帮助!

    other 2023年9月6日
    00
  • 详解Android中App的启动界面Splash的编写方法

    详解Android中App的启动界面Splash的编写方法 在Android应用程序中,启动界面(Splash)是指在应用程序启动时显示的第一个界面。它通常用于展示应用程序的品牌标识、加载资源或执行初始化操作。本文将详细介绍在Android中编写启动界面的方法。 步骤一:创建启动界面布局文件 首先,我们需要创建一个布局文件来定义启动界面的外观。在res/la…

    other 2023年8月3日
    00
  • CMD命令行下修改网络IP设置的方法

    下面是详细讲解“CMD命令行下修改网络IP设置的方法”的完整攻略。 1. 准备工作 1.1 打开CMD命令提示符 按下Win+R键,输入cmd,回车即可打开CMD命令提示符。 1.2 查看当前网络适配器名称 输入以下命令,查看当前网络适配器名称: netsh interface ipv4 show interfaces 会显示出一列网络适配器名称,找到你要修…

    other 2023年6月26日
    00
  • Win8.1系统自动开机重启是怎么回事如何解决

    问题描述: 某些情况下,Win8.1系统会出现自动开机重启的问题,非常影响用户的正常使用,那么问题是为什么会出现这个问题?如何来解决这个问题? 解决方案: 检查系统的散热情况 由于Win8.1系统的体积比较大,资源消耗也比较高,因此系统的散热问题非常容易出现。当系统过热时,可能会导致系统自动重启,因此我们在解决这个问题的时候首先要检查系统散热情况。 解决方法…

    other 2023年6月27日
    00
  • 初识C++ Vector模板与实例化原理

    初识C++ Vector模板与实例化原理 什么是Vector模板 Vector是C++ STL库提供的一种数据结构,是动态数组的一个实现。它可以在运行时动态调整容器大小,并且可以快速随机访问元素。 在C++里,vector是一个模板类,可以存储任意类型的元素。 vector模板的实例化 Vector是一个模板,需要在使用前被实例化,并且实例化时需要指定数据类…

    other 2023年6月26日
    00
  • 详解Laravel框架的依赖注入功能

    我会详细讲解“详解Laravel框架的依赖注入功能”的完整攻略: 什么是依赖注入 在编写面向对象程序时,类之间通常存在着各种各样的关联关系,常见的包括依赖关系、聚合关系和组合关系等等。而这些关系都可以用一个术语来统称——依赖。 依赖注入(Dependency Injection)是一种实现类之间松耦合关联的方式。其核心思想是:通过构造器、接口或者setter…

    other 2023年6月26日
    00
  • MFC日期显示

    MFC日期显示 MFC(Microsoft Foundation Classes)是微软公司为开发Windows操作系统的C++程序而提供的一套类库,其封装了Windows API以及一些基本的类和函数,省去了开发者自己写底层代码的繁琐工作,可以加快Windows应用程序的开发。 在MFC程序开发中,日期的格式化显示是一项重要的工作。本文将介绍如何使用MFC…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部