C语言用指针查询数在数组哪个位置
时间: 2023-07-20 13:17:51 浏览: 77
可以通过遍历数组,逐个比较数组元素和目标数的值,如果相等则返回该元素的下标位置。而使用指针的方法,可以定义一个指向数组首元素的指针,然后遍历整个数组,比较指针所指向的元素和目标数的值,如果相等则返回该元素的下标位置。具体代码实现如下:
```
int search(int *arr, int len, int target) {
int i;
for (i = 0; i < len; i++) {
if (*(arr + i) == target) { // arr + i 等价于 &arr[i]
return i;
}
}
return -1; // 没有找到目标数
}
```
其中,arr 表示指向数组首元素的指针,len 表示数组的长度,target 表示要查询的目标数。在函数中,使用 *(arr + i) 的方式来访问数组元素,它等价于 arr[i]。
相关问题
C语言使用指针的方式对数组排序使用
对于一个数组,可以使用选择排序、冒泡排序、插入排序等算法进行排序。其中,选择排序和冒泡排序比较简单,插入排序稍微复杂一些,但是效率更高。
下面以选择排序为例,介绍如何使用指针对数组进行排序。
```c
#include <stdio.h>
void selection_sort(int *arr, int len) {
int i, j, min_idx, tmp;
for (i = 0; i < len - 1; i++) {
min_idx = i;
for (j = i + 1; j < len; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
if (min_idx != i) {
tmp = arr[i];
arr[i] = arr[min_idx];
arr[min_idx] = tmp;
}
}
}
int main() {
int arr[] = {3, 4, 1, 5, 2};
int len = sizeof(arr) / sizeof(int);
selection_sort(arr, len);
int i;
for (i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
这里的`selection_sort`函数使用了指针`arr`来表示输入的数组。在函数内部,可以通过`arr[i]`来访问数组中的元素,与`*(arr + i)`等价。`len`则表示数组的长度,用于控制循环次数。
在主函数中,首先定义了一个整型数组`arr`,并根据数组长度计算出了`len`。然后调用`selection_sort`函数对数组进行排序,最后输出排序后的结果。
需要注意的是,使用指针传递数组时,需要传递数组的首地址,而不是数组名本身。因此,调用`selection_sort`函数时传递的参数应该是`selection_sort(arr, len)`,而不是`selection_sort(&arr, len)`。
C语言 用指针接收二维数组,指针是一级指针还是二级指针
C语言是一种通用的高级编程语言,广泛应用于系统软件开发和嵌入式系统等领域。它具有简洁、高效、灵活的特点,被认为是一种较为底层的编程语言。
在C语言中,可以使用指针来接收二维数组。指针是一种特殊的变量类型,它存储了一个内存地址,可以用来访问该地址上存储的数据。
当使用指针接收二维数组时,需要使用二级指针(指向指针的指针)。这是因为二维数组在内存中实际上是按行存储的,每一行都是一个一维数组。通过使用二级指针,可以实现对每一行的访问。
下面是一个示例代码,演示了如何使用指针接收二维数组:
```c
void printArray(int** arr, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main() {
int rows = 3;
int cols = 4;
// 动态分配二维数组内存
int** arr = (int**)malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++) {
arr[i] = (int*)malloc(cols * sizeof(int));
}
// 初始化二维数组
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
arr[i][j] = i * cols + j;
}
}
// 使用指针接收二维数组并打印
printArray(arr, rows, cols);
// 释放内存
for (int i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
return 0;
}
```