一、传递数组:将数组作为参数传入函数,或将数组作为数据当成是函数的返回值

    1、定义:可以传入和传出数组

    2、特征:

      1)、将数组作为参数传递给函数的本质是传递数组的地址,这种传递无需复制数组元素,所以更加高效;

      2)、数组名自身暗中包含了数组的大小,传递过程中只包含地址,因而丢失了数组大小信息;

  #include <stdio.h>

  void displayArr(int arr[]){
for(int i = ; i < ; i++){
printf("%d\t", arr[i]);
}
printf("\n"); return;
} int main(int argc, char **argv)
{
int arrInt[] = {, , , , , , , ,};
displayArr(arrInt); return ;
}

    说明:由于在displayArr()函数中缺少了数组长度,由于盲目指定了数组长度,因此会输出多余的垃圾值。

      3)、将数组作为参数时,可以使用数组表示法,arrName[]表示法;

  #include <stdio.h>

  void displayArr(int arr[], int size){
for(int i = ; i < size; i++){
printf("%d\t", arr[i]);
}
printf("\n"); return;
} int main(int argc, char **argv)
{
int arrInt[] = {, , , , , , , ,};
int size = sizeof(arrInt) / sizeof(int);
displayArr(arrInt, size); return ;
}

    说明:由于在displayArr()函数声明中使用数组表示法,传入了数组长度,在函数内部使用数组法(也可以使用指针法),保证了程序的健壮行。

      4)、将数组作为参数时,可以使用指针表示法,*arrName表示法;

  #include <stdio.h>

  void displayArr(int *arr, int size){
for(int i = ; i < size; i++){
printf("%d\t", *(arr + i));
}
printf("\n"); return;
} int main(int argc, char **argv)
{
int arrInt[] = {, , , , , , , ,};
int size = sizeof(arrInt) / sizeof(int);
displayArr(arrInt, size); return ;
}

    说明:由于在displayArr()函数声明中使用指针表示法,传入了数组长度,在函数内部使用指针法(也可以使用数组法),保证了程序的健壮行。

      5)、采用指针表示法和采用数组表示法必须传入数组的长度;

    3、指针数组的应用:

      1)、声明方式:int*  arrName[size],此时数组中的元素是指针,若需要获取指针的内容,需要使用解析操作符;

      2)、数组元素需要手动分配内存空间;

      3)、使用数组表示法获取数组元素的内容:*arrName[index]获取指针内容;

      4)、arrName[index] 等价于(*arrName + index),切记其中存储的是整型指针

      5)、使用*arrName[index]获取数组下标对应的地址处的内容

      6)、使用指针表示法获取数组元素的内容:*(*arrName + index)获取指针内容;

      7)、(*arrName + index)等价于arrName[index],切记其中存储的是整型指针

      8)、使用*(*arrName + index)获取指针运算后对应的地址处的内容

      9)、如果不能确定具体的方式,就在初始化和输出使用同一种方式

      10)、在代码2中如果在初始化时,使用第10行代码的形式,可以使用第15行代码输出数据

      11)、在代码2中如果在初始化时,使用第10行代码的形式,可以使用第16行代码输出数据

      12)、在代码2中如果在初始化时,使用第10行代码的形式,可以使用第18行代码输出数据

      13)、在代码2中如果在初始化时,使用第11行代码的形式,可以使用第17行代码输出数据

      14)、在代码2中如果在初始化时,使用第11行代码的形式,可以使用第18行代码输出数据
  代码如下代码1:

  #include <stdio.h>
#include <stdlib.h> void displayArr(int **arr, int size){
for(int i = ; i < size; i++){
printf("%d\t", *(*arr + i));
}
printf("\n"); return;
} int main(int argc, char **argv)
{
int size = ;
int* arrInt[size];
for(int i = ; i < size; i++){
*(arrInt + i) = (int *)malloc(sizeof(int));
*(*arrInt + i) = i + ;
}
displayArr(arrInt, size); return ;
}

    再看下面的代码代码2:

  #include <stdio.h>
#include <stdlib.h> int main(int argc, char **argv)
{
int size = ;
int* arrInt[size];
for(int i = ; i < size; i++){
arrInt[i] = (int *)malloc(sizeof(int));
//*arrInt[i] = 101 + i;
*(*arrInt + i) = + i;
} for(int i = ; i < size; i++){
//printf("%d\t", arrInt[i][0]);
//printf("%d\t", *arrInt[i]);
//printf("%d\t", *(*arrInt + i));
printf("%d\t", **arrInt + i);
} return ;
}

  3、传出,将数组返回

最新文章

  1. oracle归档日志写满错误解决方法
  2. 【读书笔记】读《JavaScript模式》 - 函数复用模式之现代继承模式
  3. SOA之(2)——SOA架构基础概念与设计框架
  4. IOS 弹出菜单的动态效果
  5. Cocos2d-x v3.0 正式版 如何创建一个项目,TestCpp执行
  6. HTML5 &lt;meta&gt; 标签属性
  7. Java获取某年某周的第一天
  8. Spting +Spring MVC+spring date jsp +hibernate+jq
  9. 某集团BI决策系统建设方案分享
  10. Python全栈开发记录_第七篇(模块_time_datetime_random_os_sys_hashlib_logging_configparser_re)
  11. jdbc操作根据bean类自动组装sql,天啦,我感觉我实现了hibernate
  12. vue 打包的项目当背景图路径错误
  13. linux console 显示颜色【转】
  14. noip第28课作业
  15. Error at offset之反序列化
  16. theme为dialog的Activity如何充满全屏
  17. SpringCloud - 2. 服务注册 和 发现
  18. editplus 编辑 php双击选中变量问题
  19. 【vijos】P1083 小白逛公园
  20. 20170411 F-02创建财务凭证

热门文章

  1. 关于lua 5.3 服务端热更新流程
  2. cena 测评机下载地址
  3. 二十一、C++中的临时对象
  4. PAT 乙级 1051
  5. 【dp】守望者的逃离
  6. k8s调度的预选策略及优选函数
  7. CSS基础(一)
  8. 浅探webpack优化
  9. 关于sizeof,对空指针sizeof(*p)可以吗?
  10. ACM-ICPC 2015 Shenyang Preliminary Contest B. Best Solver