1.数组作为指针传递
数组作为指针传递可以:
- 加一个数
- 减一个数
- 两个指针相减
- 自增
- 自减
int main() {int arr[] = { 1,2,3,4,5,6,7,8,9 };printf("%d\n", arr[0] + 2);printf("%d\n", arr[2] - 2);printf("%d\n", arr[0] + arr[2]);int* p = &arr[0];int* q = &arr[2];printf("%d\n", q - p);//数组的指针可以相减,表示下标之差return 0;
}
2.*p++
*p++常被用于数组的遍历
他是先返回当前解引用的值,然后自增,指向下一个元素的地址。
void traverse(int* arr, int len) {int* p = arr;while (p < arr + len) {printf("%d\n", *p++);}
}int main(){int a[] = { 1,2,3,4,5,6,7 };traverse(a, 7);return 0;
}
3.指针作为返回值
指针作为返回值一般是高危操作,因为这个指针在函数内被创建,一旦函数被销毁,这个指针就成为了悬空指针,指向了被释放的内存区域。
所以要返回的指针最好被设置为静态的或者动态分配
int* get_max_min(int* arr, int len) {int max = arr[0], min = arr[0];for (int i = 1; i < len; i++) {if (max < arr[i]) {max = arr[i];}}for (int i = 1; i < len; i++) {if (min > arr[i]) {min = arr[i];}}static int result[2];result[0] = max;result[1] = min;return result;
}
int main() {int arr[] = { 1,2,3,4 };int* result = get_max_min(arr, sizeof(arr) / sizeof(arr[0]));printf("%d %d", result[0], result[1]);return 0;
}