参考: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. drf框架 - 解析模块 | 异常模块 | 响应模块

    解析模块 为什么要配置解析模块 1)drf给我们提供了多种解析数据包方式的解析类 2)我们可以通过配置,来控制前台提交的哪些格式的数据后台在解析,哪些数据不解析 3)全局配置就是针对每一个视图类,局部 ...

  2. 一个关于gcd的等式的证明

    证:$a > b$ 且 $gcd(a,b)=1$,有 $gcd(a^n-b^n, a^m-b^m) = a^{gcd(n, m)} - b^{gcd(n,m)}$. 证明: 假设 $n > ...

  3. Map的常用实现类及Entry的用法

    public static void main(String[] args) {    //map  键值对  json格式根据你的键名来获取对应的值  //特点 :无序.以键值对的形式添加元素,键不 ...

  4. Oracle trunc() 日期、数字截取函数

    --Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual --2013- ...

  5. EL获取域中的数据

    EL(Expression Language)是表达式语言,EL的使用可以减少JAVA代码的书写. 1.EL表达式中的常量: <body bgcolor="#7fffd4"& ...

  6. Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ...

  7. 1045 Favorite Color Stripe (30)

    Eva is trying to make her own color stripe out of a given one. She would like to keep only her favor ...

  8. Mybatis mapper接口与xml文件路径分离

    为什么分离 对于Maven项目,IntelliJ IDEA默认是不处理src/main/java中的非java文件的,不专门在pom.xml中配置<resources>是会报错的,参考这里 ...

  9. 第12组 Alpha冲刺(2/6)

    Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 展示Git当日代码/文档签入记录(组内共享) 注: 由于GitHub的免费范围内对多人开发存在较多限 ...

  10. WARNING: You are using pip version 19.1.1, however version 19.2.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.

    pip3 install --upgrade pip