C语言初步了解指针

1.首先我们用两数交换值举例: 

第一种解答:

#include<stdio.h>
int main() {
	void swap(int a, int b);
	printf("请输入两个值:");
	int a, b;
	scanf_s("%d %d", &a, &b);
	swap(a, b);
    return 0;
}
void swap(int a, int b) {
	printf("%d %d", b, a);
	
}

 我们仔细观察这个这个程序,它交换两个数并不是把a和b两个变量放入函数,从而交换a和b的值,而是直接交换a和b的值,中间不涉及这两个变量,仅仅是将值在不同位置打印出来

*他们的传递的只是参数副本,而不是原始变量的地址。

第二种解答: 

#include<stdio.h>
void swap(int* a, int* b);
int main() {
	printf("请输入两个值:");
	int a, b;
	scanf_s("%d %d",&a,&b);
	swap(&a,&b);
	return 0;
}

void swap(int* a,int* b) {
	int temp = *a;
	*a = *b;
	*b = temp;
	printf("%d %d\n", *a, *b);
	return 0;
}

 而这个程序,借用指针完成了接受两个整数作为输入,并交换他们的值

指针是一种变量,其值为另一个变量的地址,通过指针可以直接访问和操作内存中的数据

在使用指针的时候用&将变量的地址传递给函数,这样函数内部就能通过指针来改变变量的值。

 2.下面是指针的一个初步运用,利用指针解决问题

输出一组数,从中找出最大数和最小数

#include<stdio.h>
void minmax(int num[], int len, int* min, int* max);
int main() {
	int num[] = {1,12,34,5,454,64,74,24,52,546,2436,2,62345,451436};
	int min, max;
 minmax(num, sizeof(num) / sizeof(num[0]), &min, &max);
	printf("最大值为%d,最小值为%d\n", max, min);
	return 0;
}
void minmax(int num[],int len, int* min, int* max) {
	*max = num[0];
	*min = num[0];
	for (int i = 0; i < len; i++) {
		if (num[i]>*max) {
			*max = num[i];
		}
		if (num[i] < *min) {
			min = num[i];
		}
	}
}

 注意:在主函数写自己的建的函数的时候不需要给其说明类型;

            引用函数的时候,注意类型和自己的创建的函数一样(尤其在出现bug修改的时候)

            注意这个操作:if(num[i]>*max){*max=num[i];}和冒泡排序的区别,在这里因为只要找出最大值,所以不需要排序,所以操作略有不同。

3利用指针写一个做除法的题(这道程序和的有不一样的地方)  

#include<stdio.h>
int divide(int a, int b, int* c);
int main() {
	int a, b;
	int c;
	printf("请输入被除数和除数:");
	scanf_s("%d %d",&a,&b);
	if (divide(a, b, &c)) {
		printf("结果为%d\n", c);
	}
	return 0;
}
int divide(int a, int b, int* c) {
	if (b == 0) {
		return 0;
	}
	else {
		*c = a / b;
		return 1;
	}
}

上面提示了不一样的,那有哪些不一样了呢?比如我们设立了函数,那个函数用的是int 而没用像以往一样用 void开头,为什么呢?因为这次我们需要做一个判断,有判断就肯定有返值,我们知道在一个程序中1表示这个程序执行成功,可以进行下一步操作;而0则表示失败,无法进行下一步操作,这个程序就是利用了这一点,用其返回值做了一个判断,而在哪里接受这个判断呢?if就登场了,它作为这个程序继不继续往下运行的屏障。

注意:本次只是使用了c的指针(所以主程序有&符号而我们写的函数中有*的符号),变量a和b只是引用了值,并没有对其造成改变。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码一探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值