指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,那么如何用指针解决数组问题呢?
比如以下实例:首先,提示用户输入10个整数(分10次提示,每次读入一个数值);
然后,使用指针,将用户输入的整数,按顺序存放到数组list1中,按逆序存放到数组list2中;
最后,使用指针,分2行输出list1和list2的所有元素。
#include <stdio.h>
int list1[10];
int list2[10];
int main() {
printf("请输入10个整数\n");
int i;
for(i=0;i<10;i++) {
printf("请输入第%d个整数:",i+1);
int x;
scanf("%d",&x);
*(list1+i)=x;
}
//按逆序存放到数组list2中
for(i=0;i<10;i++) {
*(list2+10-1-i)=*(list1+i);
}
// 分2行输出list1和list2的所有元素
for(i=0;i<10;i++) {
printf("%d ",*(list1+i));
}
printf("\n");
for(i=0;i<10;i++) {
printf("%d ",*(list2+i));
}
printf("\n");
return 0;
}
该回答引用自ChatGPT:使用指针可以解决数组问题,可以通过指针对数组进行遍历、修改和访问操作。下面是使用指针解决数组问题的示例代码,根据您的描述实现了将用户输入的整数按顺序存放到list1
数组中,按逆序存放到list2
数组中,并分行输出两个数组的所有元素。
#include <stdio.h>
#define SIZE 10
int main() {
int list1[SIZE];
int list2[SIZE];
int input;
int *ptr1 = list1;
int *ptr2 = list2;
printf("请输入10个整数:\n");
// 按顺序存放到list1中
for (int i = 0; i < SIZE; i++) {
printf("请输入第%d个整数:", i + 1);
scanf("%d", ptr1);
ptr1++;
}
ptr1 = list1 + SIZE - 1;
// 按逆序存放到list2中
for (int i = 0; i < SIZE; i++) {
*ptr2 = *ptr1;
ptr1--;
ptr2++;
}
ptr1 = list1;
ptr2 = list2;
// 输出list1的所有元素
printf("list1的所有元素:\n");
for (int i = 0; i < SIZE; i++) {
printf("%d ", *ptr1);
ptr1++;
}
printf("\n");
// 输出list2的所有元素
printf("list2的所有元素:\n");
for (int i = 0; i < SIZE; i++) {
printf("%d ", *ptr2);
ptr2++;
}
printf("\n");
return 0;
}
在上述代码中,我们使用两个指针变量ptr1
和ptr2
来分别指向list1
和list2
数组的首元素。首先,通过循环和指针输入用户的整数,并按顺序存放到list1
数组中。然后,使用指针操作将list1
数组中的元素按逆序存放到list2
数组中。最后,再次使用指针操作分行输出list1
和list2
的所有元素。
请注意,输入的整数按顺序存放到list1
数组中,但在输出时按逆序从list2
数组中读取,因此,list2
数组中的元素是list1
的逆序。
#include <stdio.h>
int main() {
// 定义数组
int nums[10];
// 使用循环将用户输入的整数存入数组
int i;
printf("请输入10个整数:\n");
for (i = 0; i < 10; i++) {
scanf("%d", &nums[i]);
}
// 按顺序输出数组元素
printf("按顺序输出:\n");
for (i = 0; i < 10; i++) {
printf("%d ", nums[i]);
}
printf("\n");
// 按逆序输出数组元素
printf("按逆序输出:\n");
for (i = 9; i >= 0; i--) {
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}