题目
用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出。
解题步骤
(1)定义指针;
(2)接收输入值;
(3)排序;
(4)输出结果;
Java
import java.util.Scanner; public class E20210813 { public static void main(String[] args) { int temp; int[] array = new int[3]; Scanner input = new Scanner(System.in); System.out.println("please enter three whole numbers:"); for (int i = 0; i < 3; i++) { array[i] = input.nextInt(); } if (array[0] > array[1]) { temp = array[0]; array[0] = array[1]; array[1] = temp; } if (array[0] > array[2]) { temp = array[0]; array[0] = array[2]; array[2] = temp; } if (array[1] > array[2]) { temp = array[1]; array[1] = array[2]; array[2] = temp; } System.out.print("the output from small to large is:"); for (int j = 0; j < 3; j++) { System.out.print(array[j] + " "); } } }
说明
- 在C/C++中,指针的作用是:通过指针间接访问内存,保留地址,可以理解为指针就是一个地址。同样地,指针就是用于取得地址的,那么这里就有疑问了(Java中没有指针啊?这怎么做?)。
- 从表面上看,Java的确没有明确给定 “指针” 这个概念。但是,深入分析,Java中引用类型本质上就是对 “指针” 的封装。使其不能直接操作内存,只能指向对象,这里我们用数组—比较方便大家理解的方式解决。
C语言-1
#include <stdio.h> void swap(int *p1, int *p2) { int temp = *p1; *p1 = *p2; *p2 = temp; } void exchange(int *q1, int *q2, int *q3) //传递地址,指针接收 { if (*q1 > *q2) swap(q1, q2); if (*q1 > *q3) swap(q1, q3); if (*q2 > *q3) swap(q2, q3); } int main() { int a, b, c, *p1, *p2, *p3; printf("please enter three integers:"); scanf("%d%d%d", &a, &b, &c); p1 = &a; p2 = &b; p3 = &c; exchange(p1, p2, p3); printf("sort from small to large:%d<%d<%d", a, b, c); return 0; }
C语言-2
#include <stdio.h> void swap(int *p1, int *p2) { int temp = *p1; *p1 = *p2; *p2 = temp; } int main() { int a, b, c; int *p1, *p2, *p3; //注意区分 printf("please enter three integers:"); scanf("%d%d%d", &a, &b, &c); p1 = &a; p2 = &b; p3 = &c; if (a > b) swap(p1, p2); if (a > c) swap(p1, p3); if (b > c) swap(p2, p3); printf("sort from small to large:%d<%d<%d", a, b, c); return 0; }
说明
使用指针时要注意这样几点:
(1)避免使用未初始化的指针,多数情况下程序运行错误都与指针未初始化有关,但是由于这种错误不能被编译器检查发现的特殊性,就需要我们格外注意。最好的解决办法就是使用指针时对它进行定义。当然,早早定义的话也不要忘记初始化,在进行初始化时可以使用
cstdlib
中定义的NULL
赋值为0。(2)因为指针类型给定指针所指向对象的数据类型,所以指针赋值要确保数据类型匹配,才可以对指针进行操作。
(3)不要误以为
int *p , a ;
是声明了两个int
型指针,实际是定义了一个int
型指针p
和一个int
型变量a
,为了进行区分我们可以在定义时分开写,详见C语言-2。