c语言指针经典程序(c语言指针经典编程题及解析)

经典程序之一:交换两个变量的值

C语言中,指针经常被用来交换两个变量的值。下面是一个经典的程序,用于交换两个整型变量的值:

#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int num1 = 10, num2 = 20;
    
    printf("交换前:num1 = %d, num2 = %d\n", num1, num2);
    
    swap(&num1, &num2);
    
    printf("交换后:num1 = %d, num2 = %d\n", num1, num2);
    
    return 0;
}

在上面的程序中,我们定义了一个函数`swap`,该函数接受两个整型指针作为参数,通过指针来改变变量的值。在`main`函数中,我们定义了两个整型变量`num1`和`num2`,并将它们的值分别设置为10和20。然后,我们调用`swap`函数,传入`num1`和`num2`的地址作为参数。在`swap`函数中,我们通过指针来交换`a`和`b`指向的变量的值。最后,我们在`main`函数中打印交换后的值。

经典程序之二:动态内存分配

C语言中,指针还经常被用来进行动态内存分配。下面是一个经典的程序,用于动态分配一个整型数组:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int size;
    int *arr;
    
    printf("请输入数组的大小:");
    scanf("%d", &size);
    
    arr = (int *)malloc(size * sizeof(int));
    
    if (arr == NULL) {
        printf("内存分配失败!\n");
        return 1;
    }
    
    for (int i = 0; i < size; i++) {
        arr[i] = i + 1;
    }
    
    printf("动态分配的数组:");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    free(arr);
    
    return 0;
}

在上面的程序中,我们首先声明一个整型变量`size`和一个整型指针`arr`。然后,我们通过`scanf`函数从用户输入中获取数组的大小。接着,我们使用`malloc`函数动态分配了一个`size`大小的整型数组的内存空间,并将返回的地址赋给`arr`指针。

在动态分配内存之后,我们首先判断内存分配是否成功。如果`arr`指针为空,即分配失败,则打印错误信息并返回。否则,我们通过`for`循环给数组赋值,然后打印出数组的值。最后,我们使用`free`函数释放动态分配的内存空间。

经典程序之三:指针数组

指针还可以用来创建指针数组,下面是一个经典的程序,用于创建一个存储字符串的指针数组:

#include <stdio.h>

int main() {
    char *fruits[] = {
        "apple",
        "banana",
        "orange",
        "grape",
        "watermelon"
    };
    
    int size = sizeof(fruits) / sizeof(fruits[0]);
    
    printf("水果列表:\n");
    for (int i = 0; i < size; i++) {
        printf("%d. %s\n", i + 1, fruits[i]);
    }
    
    return 0;
}

在上面的程序中,我们定义了一个指针数组`fruits`,该数组的元素为指向字符的指针。我们在数组的初始化列表中使用字符串常量来初始化指针数组的元素。然后,我们通过`sizeof`运算符计算出指针数组的大小,并将其除以单个元素的大小,从而得到数组的长度。最后,我们使用`for`循环打印出指针数组中存储的字符串。

通过这个程序,我们可以看到指针数组的便利之处,它可以方便地存储和访问字符串序列,而不需要为每个字符串都定义一个独立的变量。

本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/cyuyan4sbpmyb.html

郑重声明:

本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。

我们不承担任何技术及版权问题,且不对任何资源负法律责任。

如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。

如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!

(0)
上一篇 2023年8月2日 上午2:08
下一篇 2023年8月2日 上午2:08

猜你喜欢