|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
下面的程序是用来给3个整数由小到大排序的。
小甲鱼说过“通过指针对一个变量间接访问,可以理解为把它作为那个变量本身”。那么为什么直接用指针的更改来排序程序没法运行;而用地址的改变来排序就可以得到结果,求大佬指点
没法运行的程序,编译器没有报错:
- #include <stdio.h>
- int main()
- {
- int a, b, c;
- int *d, *e, *f, *g;
-
- printf("请输入三个数字:");
- scanf("%d%d%d", &a, &b, &c);
-
- d = &a;
- e = &b;
- f = &c;
-
- if (a > b)
- {
- *g = *e;
- *e = *d;
- *d = *g;
- }
- if (a > c)
- {
- *g = *f;
- *f = *d;
- *d = *g;
-
- }
- if (b > c)
- {
- *g = *f;
- *f = *e;
- *e = *g;
- }
-
- printf("%d < %d < %d\n", *d, *e, *f);
-
- return 0;
- }
复制代码
正确的程序:
- #include <stdio.h>
- int main()
- {
- int a, b, c;
- int *d, *e, *f, *g;
-
- printf("请输入三个数字:");
- scanf("%d%d%d", &a, &b, &c);
-
- d = &a;
- e = &b;
- f = &c;
-
- if (a > b)
- {
- g = e;
- e = d;
- d = g;
- }
- if (a > c)
- {
- g = f;
- f = d;
- d = g;
-
- }
- if (b > c)
- {
- g = f;
- f = e;
- e = g;
- }
-
- printf("%d < %d < %d\n", *d, *e, *f);
-
- return 0;
- }
复制代码
你第一个程序里并没有对g赋值;根据编译器的不同,这个时候g是一个“野指针”,或者干脆就指向地址0;
这个时候你向g指向的位置赋值,当然会产生各种不可预知的后果。。。
所以使用指针时,首先得给它赋值
- int a, b, c,z;
- int *d, *e, *f, *g;
-
- d = &a;
- e = &b;
- f = &c;
- g = &z;
复制代码
|
|