1、多级指针
int main()
{
int a[] = {1, 2, 3};
int b[] = {4, 5, 6};
int c[] = {7, 8, 9};
//指针数组是特殊的二维数组
int* arr[] = {a, b, c};
//指针数组相当于二级指针
int** p = arr;
//a[0][1]
printf("%d\n", *(*p + 1));
//a[2][1]
printf("%d\n", *(*(p + 2) + 1));
return 0;
}
2、值传递和地址传递
int main1()
{
int a = 1;
int b = 2;
printf("%p,%p\n", &a, &b);
//值传递
swap(a, b);
printf("%d,%d\n", a, b);
printf("%p,%p\n", &a, &b);
}
void swap1(int a, int b)
{
int temp = a;
a = b;
b = temp;
printf("%p,%p\n", &a, &b);
}
/****************************/
int main2()
{
int a = 1;
int b = 2;
printf("%p,%p\n", &a, &b);
//指针
swap2(&a, &b);
printf("%d,%d\n", a, b);
printf("%p,%p\n", &a, &b);
}
void swap2(int* aa, int* bb)
{
//改变内存地址对应的值
int temp = *aa;
*aa = *bb;
*bb = temp;
printf("%p,%p\n", &aa, &bb);
}
3、数组名做函数参数【函数的形参会退化为指针】
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int n = sizeof(a) / sizeof(a[0]);
//数组名做函数参数
printArrary(a, n);
return 0;
}
void printArrary(int *a, int n)//数组的指针为此数组第一个元素的内存地址
{
int i = 0;
for (i = 0; i < n; i++)
{
printf("%d, ", a[i]);
}
printf("\n");
}
//TODO day06(09指针作为函数返回值)