C语言中指针变量如何使用

一、指针变量的定义与声明

1.1 定义

指针变量是用来存储另一个变量的内存地址的变量。在C语言中,指针变量的类型是指向某个类型的指针。例如,int *p; 表示一个整型指针变量p。

1.2 声明

指针变量的声明分为两种形式,一种是直接声明,另一种是动态声明。直接声明是在声明变量的同时指定其类型为指针,例如:int *p;。动态声明是在声明变量后,再为其分配内存空间并指定其类型为指针,例如:int *p = (int *)malloc(sizeof(int));。

1.3 初始化

指针变量可以在声明时进行初始化,也可以在声明后再进行初始化。初始化时,需要使用取址运算符&来获取变量的内存地址,例如:int a = 10; int *p = &a;。

实际例子解析说明:

#include <stdio.h>
#include <stdlib.h>int main() {int a = 10; // 定义一个整型变量aint *p; // 定义一个整型指针变量pp = &a; // 将变量a的内存地址赋值给指针变量pprintf("a的值:%d
", a); // 输出变量a的值printf("a的内存地址:%p
", &a); // 输出变量a的内存地址printf("p的值:%p
", p); // 输出指针变量p的值,即变量a的内存地址printf("p指向的值:%d
", *p); // 输出指针变量p指向的值,即变量a的值return 0;
}

在这里插入图片描述

二、指针变量的使用

2.1 间接寻址

通过指针变量可以间接地访问其他变量的内存地址,从而实现对其他变量的操作。例如,可以通过指针变量p来修改变量a的值。

实际例子解析说明:

#include <stdio.h>int main() {int a = 10; // 定义一个整型变量aint b = 20; // 定义一个整型变量bint *p = &a; // 将变量a的内存地址赋值给指针变量p*p = b; // 通过指针变量p间接地修改变量a的值printf("a的值:%d
", a); // 输出变量a的值,此时应为20printf("b的值:%d
", b); // 输出变量b的值,此时应为20return 0;
}

2.2 函数参数传递

函数参数传递时,可以使用指针变量来实现对实参的修改。例如,可以将数组作为函数参数传递,通过指针变量来修改数组的元素值。

实际例子解析说明:

#include <stdio.h>void modify_array(int *arr, int size) {for (int i = 0; i < size; i++) {arr[i] *= 2;}
}int main() {int arr[] = {1, 2, 3, 4, 5};int size = sizeof(arr) / sizeof(arr[0]);printf("原数组:");for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("
");modify_array(arr, size);printf("修改后的数组:");for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("
");return 0;
}

2.3 动态内存分配

指针变量可以用来动态地分配和释放内存空间。例如,可以使用malloc函数为指针变量分配内存空间,然后通过指针变量来访问和操作这块内存空间。

实际例子解析说明:

#include <stdio.h>
#include <stdlib.h>int main() {int n = 5;int *arr = (int *)malloc(n * sizeof(int)); // 为指针变量arr分配内存空间if (arr == NULL) {printf("内存分配失败!
");return 1;}for (int i = 0; i < n; i++) {arr[i] = i + 1;}printf("数组元素:");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("
");free(arr); // 释放指针变量arr所指向的内存空间return 0;
}

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

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

相关文章

字节跳动 Spark 支持万卡模型推理实践

摘要&#xff1a;本文整理自字节跳动基础架构工程师刘畅和字节跳动机器学习系统工程师张永强在本次 CommunityOverCode Asia 2023 中的《字节跳动 Spark 支持万卡模型推理实践》主题演讲。 背景介绍 在云原生化的发展过程中 Kubernetes 由于其强大的生态构建能力和影响力&…

多线程基础入门【Linux之旅】——下篇【死锁,条件变量,生产消费者模型,信号量】

目录 一&#xff0c;死锁 1. 死锁的必要条件 2&#xff0c;避免死锁 二&#xff0c;条件变量 同步概念与竞态条件 条件变量——初始化 静态初始化 动态初始化 pthread_cond_destroy (销毁) pthread_cond_wait (等待条件满足) pthread_cond_signal (唤醒线程) ph…

2023 北京国炬软件年度总结—JeecgBoot与敲敲云

2023年对于北京国炬软件公司来说是一个充满成就和创新的一年。 我们成功推出了APass零代码平台—敲敲云&#xff0c;一款能够在5分钟内搭建应用的新一代零代码平台。自2023年1月1号正式上线以来&#xff0c;敲敲云已经突破了10万注册用户&#xff0c;并与数百家战略合作伙伴达…

Rust使用gRPC

需要先安装protoc&#xff08;Protocol Buffers Compiler&#xff09;&#xff0c;可据此Protobuf Compiler Installation下载 第一步&#xff1a;创建项目 创建两个新的Rust项目&#xff0c;分别作为服务端与客户端&#xff1a; cargo new rust_grpc_servercargo new rust_grp…

【python测验】数字游戏 取模数 数位dp

这题目看得人感觉要失去梦想…… 题目&#xff1a; 看不懂也做不出来&#xff0c;python方法未知&#xff0c;记录几个可供参考的帖子。 LightOJ 1068 Investigation 算法提高篇–动态规划&#xff08;八&#xff09;&#xff1a;数位DP&#xff08;3&#xff09;

【软件测试】2024年准备中/高级测试岗技术面试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、软件测试基础知…

两阶段提交协议三阶段提交协议

两阶段提交协议 分布式事务是指会涉及到操作多个数据库的事务,在分布式系统中&#xff0c;各个节点之间在物理上相互独立&#xff0c;通过网络进行沟通和协调。 XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范&#xff08;即接口函数&#xff09;&#xff0c;交易…

Spring——Spring基于注解的IOC配置

基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。 1.创建工程 1.1 pom.xml <?xml version"1.0" encoding…

TP-GMM

Task-parameterized Gaussian mixture model (TP-GMM) 对于一组示教数据 ξ ∈ R D N \bm{ξ} ∈R^{DN} ξ∈RDN&#xff0c;从不同的坐标系去观测它 X t ( j ) A t , j − 1 ( ξ t − b t , j ) X^{(j)}_t\bm{A}^{-1}_{t,j}(\bm{ξ}_t-\bm{b}_{t,j}) Xt(j)​At,j−1​(ξ…

多通道病虫害分子检测仪-百科科普知识

在农业科技日新月异的今天&#xff0c;病虫害防治已经成为现代农业的重要一环。为了更精准、更快速地检测和防治病虫害&#xff0c;多通道病虫害分子检测仪应运而生&#xff0c;成为守护绿色家园的"黑科技"。 WX-XC1多通道病虫害分子检测仪是一款集成了分子生物学、…

如何使用Cloudreve+Cpolar搭建个人PHP云盘系统并发布公网可访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

10.java初始化——(浏览阅读代码时的圣经)

初始化 类的初始化 上面我们创建出来了—个 Car 这个对象&#xff0c;其实在使用 new 关键字创建—个对象的时候&#xff0c;其实是调用了 这个对象无参数的构造方法进行的初始化&#xff0c;也就是如下这段代码 这个无参数的构造函数可以隐藏&#xff0c;由 JVM 自动添加。…