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指針作爲函數返回值)