c语言指针对数组问题的解决

指针,是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;
}

img

该回答引用自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;
}

在上述代码中,我们使用两个指针变量ptr1ptr2来分别指向list1list2数组的首元素。首先,通过循环和指针输入用户的整数,并按顺序存放到list1数组中。然后,使用指针操作将list1数组中的元素按逆序存放到list2数组中。最后,再次使用指针操作分行输出list1list2的所有元素。

请注意,输入的整数按顺序存放到list1数组中,但在输出时按逆序从list2数组中读取,因此,list2数组中的元素是list1的逆序。

  • 以下回答由chatgpt基于相关博客总结生成:
    #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;
    }