其实我原计划是七天搞定的,真没想到十天也没搞定.
二维数组做参数
#include <stdio.h>
void twoArrayAsArgument(int arr[3][4], int row, int col);
//二维数组传递时数组指针
void twoArrayAsArgument2(int (*arr)[4], int row, int col);
int main(int argc, char* argv[])
{
//二维数组做函数参数
int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
//二维数组 行数 列数
int row = sizeof(arr) / sizeof(arr[0]);
int col = sizeof(arr[0]) / sizeof(arr[0][0]);
twoArrayAsArgument(arr, row, col);
twoArrayAsArgument2(arr, row, col);
return 0;
}
void twoArrayAsArgument(int arr[3][4], int row, int col)
{
printf("%d\n", sizeof(arr)); //4
}
void twoArrayAsArgument2(int(*arr)[4], int row, int col)
{
printf("%d\n", sizeof(arr)); //4
//遍历
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < col; ++j)
{
printf("%d ", arr[i][j]);
}
}
printf("\n");
}
指针作为返回值
#include <stdio.h>
int* pointerAsReturn(int* p);
//刚才说到数组指针 突然想起来 char** argv 这个指针数组作为参数的优化(char* argv[])
int main(int argc, char** argv)
{
int* p = NULL;
p = pointerAsReturn(p);
printf("hello world\n");
//其实这时是能接受到值的 但是(这是IDE为我们做的好事也好坏事也好) 总之这个值是不可靠的垃圾值
//在上面打印输出语句就不会接受到值,如果打印一个还可以接收到,那么就两个
printf("%d\n", *p);
return 0;
}
int* pointerAsReturn(int* p)
{
int num = 10;
p = #
return p;
}
//总结就一句话,不要返回局部的指针变量,如果有需要可以返回局部静态指针变量
函数指针
#include <stdio.h>
int add(int num, int num2);
int main(int argc, char** argv)
{
//其实数组指针是
int arr[3][5] = { 0 };
int(*p_arr)[5] = arr;
//函数指针也就是
int (*p_add)(int num, int num2) = add;
//调用
p_add(1, 2);
//也可以
(*p_add)(1, 2);
//还可以
(***********************p_add)(1, 2);
//其实对任何函数解引用都是无意义的操作
return 0;
}
int add(int num, int num2)
{
printf("hello world\n");
return num + num2;
}