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.方便的操作数组和函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值