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

C语言中的指针

一.指针的概念:

指针(又叫指针变量)又叫做内存地址,可以对内存地址所指向的内存中的数据进行修改

二.指针的使用方法:

数据类型 * 变量名

注意这里的数据类型要跟指向变量的类型保持一致

星号(*)的作用是标记之后的变量为一个指针变量,如果不加星号的话,后面的变量就只会是一个普普通通的数据类型变量

三.指针的作用:

1.查询数据

在了解这个作用之前,我们需要了解,星号(*)其实是解引用运算符,解引用运算符一旦与地址连用就表示将该地址上的数据取出

#include<stdio.h>
int main() {
	int ans = 10;
	// 定义一个int类型的指针变量用于存储ans的地址 
	int* p = &ans;
	// 解引用p中存储的地址,获取该地址中存储的数据 
	printf("%d\n", *p);
	// 解引用p中存储的地址,修改其中的数据 
	*p = 100;
	printf("%d", *p); 
}

2.存储数据

其实在上方的查询数据中就已经使用了这个功能了

格式为:

* 指针名 = 数据值;

只要解引用了指针变量中的地址值,就可以随意修改其中存储的数据值了

3.参数传递

4.内存管理

四.指针的使用细节:

1.指针变量的名字跟星号没有关系,就是我们定义的那个变量名,而不是*变量名,星号只是为了指明该变量是一个指针变量而已

2.指针变量的数据类型要跟指向变量的类型保持一致

3.指针变量占用的大小跟数据类型无关,跟编译器有关(32位的大小为4个字节,64位的大小为8个字节)

4.给指针变量赋值的时候不能把一个数值赋给指针变量

五.指针的作用:

1.操作其他函数中的变量

举例:定义两个变量,要求交换这两个变量中记录的值(交换的代码要写在一个新的函数swap中)

#include<stdio.h>
void swap(int* x, int* y) {
	int temp = *x;
	*x = *y;
	*y = temp;
}

int main() {
	int a = 10;
	int b = 20;
	int* x = &a;
	int* y = &b;
	swap(x, y);
	printf("a = %d,b = %d", a, b);
}

注意:函数中变量的生命周期跟函数相关,函数结束了,变量也会消失,此时在其他函数中就无法通过指针使用了,因此如果不想函数中的变量被回收,可以在变量前面加static关键字(加了static关键字的变量就会一直保存到程序结束)

2.函数返回多个值

举例:定义一个函数,求数组的最大值和最小值,并进行返回

#include<stdio.h>
void getMaxAndMin(int arr[], int len, int* max, int* min) {
	for (int i = 0; i < len; i++) {
		if (arr[i] > *max) 
			*max = arr[i];
		if (arr[i] < *min)
			*min = arr[i];
	}
}

int main() {
	int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	int len = sizeof(arr) / sizeof(arr[0]);
	int max = arr[0], min = arr[0];
	getMaxAndMin(arr, len, &max, &min);
	printf("max = %d, min = %d", max, min);
}

3.函数的结果和计算状态分开

举例:定义一个函数,将两数相除,获取他们的余数

#include<stdio.h>
void getRemainder(int x, int y, int* ans) {
	*ans = x % y;
}

int main() {
	int a = 33;
	int b = 6;
	int ans;
	getRemainder(a, b, &ans);
	printf("%d", ans);
}

4.方便的操作数组和函数

相关文章:

  • kvm虚拟机的基本使用
  • node-ddk, electron组件, 自定义本地文件协议,打开本地文件
  • C51 Proteus仿真实验22:按键发声
  • 云原生算力引擎:分布式推理的流体动力学
  • NVIDIA Dynamo源码编译
  • 《K230 从熟悉到...》图像获取+FPS
  • 【工具变量】全国地级市地方ZF债务数据集(2014-2023年)
  • JAVA学习*接口
  • Python连接StarRocks全流程实践: SQL文件调用与Pandas混合优化
  • 第16章:基于CNN和Transformer对心脏左心室的实验分析及改进策略
  • Kotlin的 noinline和crossinline关键字
  • k8s的核心组件整理
  • 多阶段构建实现 Docker 加速与体积减小:含文件查看、上传及拷贝功能的 FastAPI 应用镜像构建
  • Android 接 Twitter Share ,常见问题及解决方案
  • 流畅如丝:利用requestAnimationFrame优化你的Web动画体验
  • 基于Web大学生创新服务平台(源码+lw+部署文档+讲解),源码可白嫖!
  • 摄影工作室预约管理系统基于Spring BootSSM
  • Sympy入门之微积分基本运算
  • 【中间件】Rabbit离线部署操作
  • windows单节点验证victoriametrics结合AlertManger实现告警推送webhook
  • 公示资费套餐、规范营销行为,今年信息通信行业将办好这十件实事
  • 技术派|威胁F-35、击落“死神”,胡塞武装防空战力如何?
  • “家国万里时光故事会” 举行,多家庭共话家风与家国情怀
  • 阿里上季度营收增7%:淘天营收创新高,AI产品营收连续七个季度三位数增长
  • 缅甸内观冥想的历史漂流:从心理治疗室到“非语言现场”
  • 联合国第二届运动会闭幕,刘国梁受邀成为“联合国运动会大使”