关注互联网技术岗位校园招聘
数据结构、算法、计算机网络、操作系统
c/java从表层到底层
leetcode每日一题
思维
学习内容(简记)
(一)写博客
参考
(41条消息) 【小白】如何写好自己的一篇CSDN博客(美化1)_cungudafa的博客-CSDN博客_csdn博客怎么写博文
(二)数组传参
1.一维数组
(1)传数组(test(arr))函数处理(int test(int a[]))不改变原数组值
(2)创建指针指向数组(int arr[5] ,*p; p=arr;)
传数组指针(test(*p))函数处理(int test(int *p))会改变原数组值
2.二维数组 创建arr[5][6] n=5 m=6
(1)传数组(test(arr)) 函数(int test(int a[][5]))列不可省略
函数处理不改变原数组值
(2)传数组指针(test(*p)) 函数(int test(int *p)),传输后转为一维数组
函数处理会改变原数组值
(3)传数组指针(test((int *)arr))函数(int test(int *p))
-
(int *)a是表示把a强制转换成一个int型的指针。a里面存着数组的首地址
-
如果以前a是char型,编译器会认为a指向的那一个字节的内存单元是a里面的东西
-
由于数组里面存放的数据为int型,把a转换成int型,编译器会认为a指向的连续四个字节里的东西都是a里面的。
引用例:
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
printf("%d ",*(p+n*i+j));
}
}
传数组指针( test((int **)arr)) ) 函数(int test(int **p))
引用例:
for(i = 0; i < 5; i++){
for(j = 0; j < 6; j++){
printf("%d ",*((int *)p+6*i+j));
//int *p指向arr[0][0]+6*i指向第几行+j指向第几列
}
}
参考
(41条消息) C语言数组当参数传递_Laoynice的博客-CSDN博客_c语言传递数组
回顾知识
数组传参不能在自定义函数中计算数组大小(即个数(sizeof(arr)/arr[0])),所以要用原数组计算后传参过去
有时候可以尽量不用数组、不用创建变量,节省存储空间。
例如:简单计算结果不需要开辟许多空间,直接使用算式代替。
未知存储具体大小的数组(arr[10000000])