指针就是一种指向内存地址的变量,利用它的一些特性我们可以完成很多工作
- 两个数字从小到大排序(引申的业务场景,对企业大佬的银行存款金额进行排序,这当然通过交换变量对应的数值来实现,否则盖茨大爷的钱可能全交换到我的账户下来,靠谱的做法是声明(或者说引入)指针变量,用来按照从小到大的顺序标的(指向)不同账户下的金额)
#include<stdio.h> #include<stdlib.h> void main() { double *pa, *pb,*tmp; double a, b; printf("请输入两个数,排列其大小 "); printf("输入金额1"); scanf_s("%lf",&a); printf("输入金额2"); scanf_s("%lf",&b); pa = &a; pb = &b; if (*pb < *pa) { tmp = pa; pa = pb; pb = tmp; } printf("从小到大顺序%f,%f",*pa,*pb); system("pause"); }
- 指针作为参数
#include<stdio.h> #include<stdlib.h> void arrayasparam(int a[10]) { printf(" 数组作为参数的大小%d", sizeof(a[10])); //输出的值为4,这可以算是以形式参数传值的一个特例:a[10]实际上是a这个数组首元素的地址,指针变量长度为4,无论他是整型数组指针还是浮点亦或是字符数组 for (int i = 0; i < 10; i++) { a[i] = 9 - i; printf("元素逆序之:%d ",a[i]); } } void fakeparam(int mynum) { mynum = 10; } void needleparam(int *mynum) { *mynum = 10; } void main() { int num[10] = {0,1,2,3,4,5,6,7,8,9}; printf("num数组的长度是%d ",sizeof(num)); arrayasparam(num); int a = 66; fakeparam(a); printf("a的值是%d ", a); needleparam(&a); printf("a的值是%d ", a);//这个厉害,按照地址按图索骥完成了值的修改 system("pause"); }