指针数组和数组指针作为形式参数
类型
- 形式参数为指针数组
- 形式参数为数组指针
- 总结
形式参数为指针数组
void test(int* p[3], int n)
{
printf("p为:%p\n", p);//p为:000000D93D71F718
p++;
printf("p为:%p\n", p);//p为:000000D93D71F720 加了8
p++;
printf("p为:%p\n", p);//p为:000000D93D71F728 加了8
}
#include<stdio.h>
int main(void)
{
int arr[3][5] = { 1,2,3,4,5,6 };
test(arr, 6);//arr为:000000D93D71F718
printf("arr为:%p\n", arr);
return 0;
}
数组进行加减运算时,加多少,减多少取决于数组的类型。数组的类型是指向整形的指针,指针的大小是8个字节,所以p加1相当于p加8.
形式参数为数组指针
void test(int (*p)[5], int n)
{
printf("p为:%p\n", p);//p为:000000A908EFF648
p++;
printf("p为:%p\n", p);//p为:000000A908EFF65C 加了20
p++;
printf("p为:%p\n", p);//p为:000000A908EFF670 加了20
}
#include<stdio.h>
int main(void)
{
int arr[3][5] = { 1,2,3,4,5,6 };
test(arr, 6);
printf("arr为:%p\n", arr);//arr为:000000A908EFF648
return 0;
}
指针进行加减运算时,加多少,减多少取决于指针的类型。指针的类型是指向有五个整形的数组,一个整形的大小是4个字节,五个整形的数组占20个字节。
总结
指针或者数组在进行运算时,加多少减多少等于加的这个数乘一个倍数。这个倍数取决于指针或数组的类型。指针则取决于指针指向类型的大小,数组则取决于数组的类型,即数组的每个“数”都装了什么。
函数在传递参数时,形式参数在栈区新开辟一块容纳形式参数类型的空间,实际参数的值赋给ta。