指针(二)

一、数组名的理解

二、使用指针访问数组

三、一维数组传参的本质

四、冒泡排序

五、二级指针 

六、指针数组

七、用指针数组模拟二维数组

一、数组名的理解

        在C语言中,数组名实际上是数组首元素的地址。例如,对于一个整型数组 arrarr 表示数组的第一个元素的地址。这意味着在很多情况下,使用数组名就像使用指向数组首元素的指针一样。因此,可以通过数组名来操作数组的元素。

输出:

 

二、使用指针访问数组

        通过指针访问数组是C语言中的一种常见操作。可以通过定义一个指针变量,并将数组名赋值给该指针变量来实现。例如:

int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // 将数组名赋值给指针变量

然后,可以通过指针变量来访问数组的元素:实际上*(ptr+i)=arr[i]

printf("%d", *ptr); // 输出数组的第一个元素
printf("%d", *(ptr + 1)); // 输出数组的第二个元素

三、一维数组传参的本质

       在C语言中,当将一维数组作为参数传递给函数时,实际上传递的是数组首元素的地址。因此,函数内部可以通过该地址来访问和操作数组的元素。这也意味着对数组进行传参时,传递的是数组的引用而不是整个数组的副本,这样可以减少内存的开销和提高程序的执行效率。下面是一个简单的举例:

#include <stdio.h>

// 函数原型,接受一个整型数组和数组的长度作为参数
void printArray(int arr[], int size);

int main() {
    int arr[5] = {10, 20, 30, 40, 50};
    
    // 调用函数,传递数组 arr
    printArray(arr, 5);
    
    return 0;
}

// 定义函数,打印数组的所有元素
void printArray(int arr[], int size) {
    printf("The elements of the array are: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

     在这个示例中,printArray 函数接受一个整型数组 arr[] 和数组的长度 size 作为参数。在 main 函数中,我们声明了一个整型数组 arr,然后调用 printArray 函数,并将数组 arr 和数组的长度传递给该函数。在 printArray 函数中,我们使用一个循环遍历数组的所有元素,并将它们打印出来。因为数组名 arr 实际上是数组的地址,所以在函数中传递数组名时,实际上传递的是数组的地址,函数可以通过这个地址来访问数组的元素。

四、冒泡排序

        冒泡排序是一种简单直观的排序算法,它重复地遍历要排序的数组,一次比较两个相邻的元素,并按照指定的顺序交换它们,直到整个数组排序完成。

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

五、二级指针 

         二级指针是指指向指针的指针。在C语言中,它允许我们间接地访问或修改指针指向的位置,从而使得我们能够动态地修改指针所指向的内容或指向另一个指针。这种间接的能力对于处理复杂的数据结构和在函数中动态分配内存非常有用。以下示例代码,演示了二级指针的用法:

      在这个示例中,我们首先定义了一个整型变量 num,然后声明了一个指向 int 类型的指针 ptr1 和一个指向指针的指针 ptr2。我们将 ptr1 指向 num 的地址,然后将 ptr2 指向 ptr1 的地址。这样,ptr2 就成为了一个指向指针 ptr1 的指针。通过 ptr1ptr2,我们可以访问和修改 num 的值。例如,*ptr1**ptr2 都可以用来访问 num 的值。通过 **ptr2 = 20;,我们将 num 的值修改为 20,这会直接影响到 num 变量本身。

六、指针数组

指针数组是一个数组,其元素都是指针。每个指针可以指向一个特定类型的数据,例如整数、字符或其他指针等。下面是一个指针数组的基本示例及其解释:

        在这个示例中,我们定义了一个名为 ptrArr 的指针数组,它包含了三个指针元素。然后,我们声明了三个整型变量 num1num2num3。接着,我们将指针数组中的每个指针分别指向这三个整型变量。通过 ptrArr[0]ptrArr[1]ptrArr[2],我们可以分别访问指针数组中的每个指针元素。每个指针元素指向一个整型变量,并且我们可以通过解引用指针来访问该变量的值,例如 *ptrArr[0] 就是 num1 的值。

七、用指针数组模拟二维数组

        可以使用指针数组来模拟二维数组的行和列。例如,可以定义一个指针数组,每个元素指向一个一维数组,这样就可以模拟二维数组的结构。使用指针数组模拟二维数组可以更加灵活地管理内存和处理多维数据。

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值