网站优化公司方案,中国域名是,做电商自建网站怎样,ui是什么设计目录 一、使用指针访问数组二、数组名的理解1、数组首元素的地址2、整个数组 三、一维数组传参的本质四、冒泡排序五、二级指针六、指针数组 一、使用指针访问数组
可以使用指针来访问数组元素。例如#xff0c;可以声明一个指针变量并将其指向数组的第一个元素#xff0c;然… 目录 一、使用指针访问数组二、数组名的理解1、数组首元素的地址2、整个数组 三、一维数组传参的本质四、冒泡排序五、二级指针六、指针数组 一、使用指针访问数组
可以使用指针来访问数组元素。例如可以声明一个指针变量并将其指向数组的第一个元素然后通过递增指针的方式来访问数组的其他元素
#includestdio.h
int main()
{int arr[5] { 1, 2, 3, 4, 5 };int* ptr arr; // 指针指向数组的第一个元素for (int i 0; i 5; i){printf(%d , *ptr); // 访问数组元素ptr; // 指针递增指向下一个元素}return 0;
}输出结果
二、数组名的理解
在C语言中数组名有时代表数组中首元素的地址有时代表整个数组视情况而定。
1、数组首元素的地址
例1 定义一个整型数组arr可以用数组名arr表示数组的首地址作为参数传递给函数
#includestdio.hvoid printArray(int arr[], int size)
{for (int i 0; i size; i) {printf(%d , arr[i]);}printf(\n);
}int main()
{int arr[5] {1, 2, 3, 4, 5};printArray(arr, 5);return 0;
}输出结果
这里printArray函数的参数形式为int arr[]实际上是将数组名arr作为指针常量传递给函数。 例2 用数组名访问数组中的元素
#includestdio.h
int main()
{int arr[5] { 1, 2, 3, 4, 5 };int* ptr arr;printf(%d\n, *ptr); // 输出1ptr;printf(%d\n, *ptr); // 输出2return 0;
}输出结果
这里arr和ptr都指向数组的第一个元素可以通过指针操作来访问数组的元素。 2、整个数组
例1 sizeof中单独放数组名这⾥的数组名表⽰整个数组计算的是整个数组的⼤⼩单位是字节
#includestdio.h
int main()
{int arr[5] { 1, 2, 3, 4, 5 };int size sizeof(arr);printf(%d\n, size);return 0;
}输出结果 例2 数组名这⾥的数组名表⽰整个数组取出的是整个数组的地址整个数组的地址和数组⾸元素的地址是有区别的
#includestdio.h
int main()
{int arr[5] { 1,2,3,4,5 };printf(arr[0] %p\n, arr[0]);printf(arr[0]1 %p\n, arr[0] 1);printf(arr %p\n, arr);printf(arr1 %p\n, arr 1);printf(arr %p\n, arr);printf(arr1 %p\n, arr 1);return 0;
}输出结果 这⾥我们发现arr[0]和arr[0]1相差4个字节arr和arr1相差4个字节是因为arr[0]和arr都是⾸元素的地址1就是跳过⼀个元素。 但是arr和arr1相差20个字节这就是因为arr是数组的地址1操作是跳过整个数组的。
除了这两个例子之外其他任何地⽅使⽤数组名都表⽰⾸元素的地址。
三、一维数组传参的本质
在C语言中一维数组传参时实际上传递的是数组的首地址也就是数组名。函数可以通过修改传入的数组来修改实际的数据。
#includestdio.hvoid modifyArray(int arr[], int size)
{for (int i 0; i size; i) {arr[i] * 2; // 修改数组元素}
}int main()
{int arr[5] {1, 2, 3, 4, 5};modifyArray(arr, 5); // 传递数组名作为参数for (int i 0; i 5; i) {printf(%d , arr[i]); // 输出修改后的数组}return 0;
}输出结果
四、冒泡排序
冒泡排序是一种基本的排序算法通过多次比较和交换来实现。算法的核心思想是从数组的第一个元素开始依次比较相邻的两个元素如果前一个元素大于后一个元素则交换它们的位置。
#includestdio.hvoid bubbleSort(int arr[], int size)
{for (int i 0; i size - 1; i) {for (int j 0; j size - i - 1; j) {if (arr[j] arr[j 1]) {int temp arr[j];arr[j] arr[j 1];arr[j 1] temp;}}}
}int main()
{int arr[5] {5, 4, 3, 2, 1};bubbleSort(arr, 5);for (int i 0; i 5; i) {printf(%d , arr[i]);}return 0;
}输出结果
五、二级指针
二级指针是指向指针的指针。通过使用二级指针可以在函数中修改指针的值间接修改指针指向的变量。
#includestdio.hvoid changeValue(int **ptr)
{int newValue 10;*ptr newValue; // 修改二级指针指向的变量
}int main()
{int value 5;int *ptr value;changeValue(ptr); // 传递二级指针作为参数printf(%d, *ptr); // 输出修改后的值return 0;
}输出结果
六、指针数组
指针数组是一个数组其中的每个元素都是指针。通过指针数组可以存储多个指针并进行相应的操作。
#includestdio.hint main()
{int a 1, b 2, c 3;int *ptrArray[3]; // 声明指针数组ptrArray[0] a; // 将指针赋值给数组元素ptrArray[1] b;ptrArray[2] c;for (int i 0; i 3; i) {printf(%d , *ptrArray[i]); // 输出数组元素指向的值}return 0;
}输出结果