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;
}