参考:C 传递数组给函数

参考:C语言二维数组作为函数参数传递

参考:二维数组作为函数参数传递剖析(C语言)(6.19更新第5种)


总结:

一维数组参数,可以是地址、arr[]、arr[n]

二维数组比较复杂,需要提供列的值,否则会报错,可参考上面的网址

#include <stdio.h>
#include <stdlib.h> void myFunc1(int length, int *arr) {
for (int i = 0; i < length; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return;
} void myFunc2(int length, int arr[]) {
for (int i = 0; i < length; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return;
} void myFunc3(int length, int arr[length]) {
for (int i = 0; i < length; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return;
} void myFunc4(int row, int column, int *arr2) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
printf("arr2[%d][%d] = %d ", i, j, *(arr2 + i*column + j));
}
printf("\n");
}
return;
} void myFunc5(int row, int column, int arr2[][column]) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
printf("arr2[%d][%d] = %d ", i, j, arr2[i][j]);
}
printf("\n");
}
return;
} int main() {
int arr[5] = {1, 2, 3, 4, 5}; printf("Parameter is pointer:\n");
myFunc1(5, &arr[0]); // ok with arr printf("Parameter is array[]:\n");
myFunc2(5, &arr[0]); // ok with arr printf("Parameter is array[length]:\n");
myFunc3(5, &arr[0]); // ok with arr int arr2[2][3] = {{1, 2, 3}, {4, 5, 6}}; printf("Parameter is pointer:\n");
myFunc4(2, 3, arr2[0]); // &arr2[0][0] is ok, but arr2 is not ok
// *arr2 is ok.
// but actually they have the same address printf("Parameter is pointer:\n");
myFunc5(2, 3, arr2); // not ok with arr2[0]
// not ok with &arr2[0][0] printf("\narr2 = %p\n", arr2);
printf("arr2[0] = %p\n", arr2[0]);
printf("*arr2 = arr2[0] = %p\n", *arr2);
printf("arr2[0][0] = %p\n", &arr2[0][0]);
printf("**arr2 = *arr2[0] = arr2[0][0] = %p\n\n", &arr2[0][0]); printf("address of this two-dimentional array:\n");
printf("arr2 = %p\n", arr2);
for (int i = 0; i < 2; i++) {
printf(" arr2[%d] = %p\n", i, arr2[0]);
for (int j = 0; j < 3; j++) {
printf(" arr2[%d][%d] = %p ", i, j, &arr2[i][j]);
}
printf("\n");
} printf("we can use the unexisted element, interesting!\n");
printf("*arr2 means arr2[0], the first row.\n");
printf("**arr2 means *arr2[0] means arr2[0][0], the first element of the first row.\n");
printf("arr2[1][0] = %d\n", arr2[1][0]);
printf("arr2[0][3] = %d\n", arr2[0][3]);
printf("*(*(arr2 + 1) + 0) = %d\n", *(*(arr2 + 1) + 0));
printf("*(*(arr2 + 0) + 3) = %d\n", *(*(arr2 + 0) + 3));
printf("*(arr2[0] + 1*3 + 0) = %d\n", *(arr2[0] + 1*3 + 0));
printf("*(*arr2 + 1*3 + 0) = %d\n", *(*arr2 + 1*3 + 0));
printf("*(&arr2[0][0] + 1*3 + 0) = %d\n", *(&arr2[0][0] + 1*3 + 0));
printf("*(&arr2[0][0] + 3) = %d\n", *(&arr2[0][0] + 3)); return 0;
}

output:

Parameter is pointer:
1 2 3 4 5
Parameter is array[]:
1 2 3 4 5
Parameter is array[length]:
1 2 3 4 5
Parameter is pointer:
arr2[0][0] = 1 arr2[0][1] = 2 arr2[0][2] = 3
arr2[1][0] = 4 arr2[1][1] = 5 arr2[1][2] = 6
Parameter is pointer:
arr2[0][0] = 1 arr2[0][1] = 2 arr2[0][2] = 3
arr2[1][0] = 4 arr2[1][1] = 5 arr2[1][2] = 6 arr2 = 0x7ffc6bdc38a0
arr2[0] = 0x7ffc6bdc38a0
*arr2 = arr2[0] = 0x7ffc6bdc38a0
arr2[0][0] = 0x7ffc6bdc38a0
**arr2 = *arr2[0] = arr2[0][0] = 0x7ffc6bdc38a0 address of this two-dimentional array:
arr2 = 0x7ffc6bdc38a0
arr2[0] = 0x7ffc6bdc38a0
arr2[0][0] = 0x7ffc6bdc38a0 arr2[0][1] = 0x7ffc6bdc38a4 arr2[0][2] = 0x7ffc6bdc38a8
arr2[1] = 0x7ffc6bdc38a0
arr2[1][0] = 0x7ffc6bdc38ac arr2[1][1] = 0x7ffc6bdc38b0 arr2[1][2] = 0x7ffc6bdc38b4
we can use the unexisted element, interesting!
*arr2 means arr2[0], the first row.
**arr2 means *arr2[0] means arr2[0][0], the first element of the first row.
arr2[1][0] = 4
arr2[0][3] = 4
*(*(arr2 + 1) + 0) = 4
*(*(arr2 + 0) + 3) = 4
*(arr2[0] + 1*3 + 0) = 4
*(*arr2 + 1*3 + 0) = 4
*(&arr2[0][0] + 1*3 + 0) = 4
*(&arr2[0][0] + 3) = 4

【426】C 传递数组给函数的更多相关文章

  1. ajax向后台传递数组参数并将后台响应的数据赋值给一个变量供其它插件使用

    1.在js中封装ajax向后台传递数组参数函数 //combogrid * * @Description 封装ajax向后台传递数组参数并将后台响应的数据赋值给一个变量方便其他插件使用该数据函数 * ...

  2. c语言函数传递数组

    1.传递数组,打印不出来 #include <stdio.h> void solve() { printf(]); } int main() { int i; ;i<n;i++) { ...

  3. C++ 数组作为函数参数时,传递数组大小的方法

    废话不多说,先上错误示范: void fun(int arr[arr_num]) { // ... } int main() { // ... int *arr = new int[10]; fun( ...

  4. JavaScript中常见的数组操作函数及用法

    JavaScript中常见的数组操作函数及用法 昨天写了个帖子,汇总了下常见的JavaScript中的字符串操作函数及用法.今天正好有时间,也去把JavaScript中常见的数组操作函数及用法总结一下 ...

  5. C语言中如何将二维数组作为函数的参数传递

    今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...

  6. C语言二维数组作为函数的参数

    前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include < ...

  7. jquery ajax传递数组给php

    写成:var data = {'item[]':item}; $.post(url,data,function(return_data) 写成item:item会导致数据缺失. 更多:http://w ...

  8. ​C语言数组作为函数参数

    数组可以作为函数的参数使用,进行数据传送. 数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用:另一种是把数组名作为函数的形参和实参使用. 数组元素作函数实参 数组元素就是下标变量, ...

  9. jQuery数组处理函数

    写在前面: jQuery的数组处理函数整理如下,如有补充和建议,欢迎评论交流~   1.$.trim(value)  从value中删除任何前导或尾随的空白字符   2.$.each(containe ...

随机推荐

  1. 什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?

    只有TCP有粘包现象,UDP永远不会粘包! 粘包:在接收数据时,一次性多接收了其它请求发送来的数据(即多包接收).如,对方第一次发送hello,第二次发送world, 在接收时,应该收两次,一次是he ...

  2. 5、Hadoop 2.6.5 环境搭建

    下载 地址:http://archive.apache.org/dist/hadoop/common/ sudo wget http://archive.apache.org/dist/hadoop/ ...

  3. 当服务全部宕机时候的处理方法,md

    ![](https://xiahualou.oss-cn-shanghai.aliyuncs.com/img/20191219143156.png)   来自为知笔记(Wiz)

  4. SIGAI机器学习第二十集 AdaBoost算法1

    讲授Boosting算法的原理,AdaBoost算法的基本概念,训练算法,与随机森林的比较,训练误差分析,广义加法模型,指数损失函数,训练算法的推导,弱分类器的选择,样本权重削减,实际应用 AdaBo ...

  5. salt state.sls windows 传输文件

    salt 安装 - 传输文件  一.master  -- minion linux 下 master 拷贝到 minion 上 1.cp.get_file 拷贝文件 # salt '172.16.3. ...

  6. linux 安装gcc 和 g++

    以CentOS为例,安装后是没有C语言和C++编译环境的,需要手动安装,最简单的是用yum的方式安装,过程如下: 1.安装gcc yum install gcc 询问是否,按y键回车即可,或者 yum ...

  7. kindle touch 5.1.2 update your kindle 灰色 解决办法

    要出差了,于是把抽屉里的老Kindle Touch拿出来想升个级,baidu说多看费电,果断卸了用原生. 但是原生里面升级选项“update your kindle”是灰色的,没法点,怎么办? 试了半 ...

  8. leetcode 838

    我发现我非常不擅长解决这种 ummm充满了各种逻辑判断的问题 orz! 因为总是漏少几种情况(很绝望orz) 这道题我是这么判断的 temp为更改后的字符串,dominoes为原字符串 对于原字符串, ...

  9. 【一起来烧脑】一步学会CSS3体系

    [外链图片转存失败(img-yfi1VPyy-1563434266398)(https://upload-images.jianshu.io/upload_images/11158618-fc8784 ...

  10. RS码的突发纠错能力

    RS码便于纠突发错误.所谓突发错误,是指burst errors. 即一长串连续位出错.例如 0011XXXX1010. 其中X表示出错.如果是GF(2^4)中定义的RS码,则可以由一个符号错误纠正. ...