参考: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. python数据分析之数据分布

    转自链接:https://blog.csdn.net/YEPAO01/article/details/99197487 一.查看数据分布趋势 import pandas as pd import nu ...

  2. go实现文件的上传

    上传端 send.go package main import ( "fmt" "io" "net" "os") fun ...

  3. 单片机开发之C语言编程基本规范

    为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范.本标准规定了程序设计人员进行程序设计时必须遵循的规范.本规范主要针对单片机编程语言和08编译器而言,包括排版.注释.命名.变量 ...

  4. CSS精灵图(王者荣耀案例)

    首先,我们应该知道引入精灵图的原因: 具体是因为,网页上面的每张图片都要经历一次请求才能展示给用户,小的图标频繁的请求服务器,降低页面的加载速度,为了有效地减少服务器接收和发送请求的次数,提高页面的加 ...

  5. flask入门脚本解释

    创建一个最小的flask应用, 稍做编辑如下, 开启debug调试模式后, 服务器自动加载服务器的修改. 如何自己构建一个优雅的url呢 http方法介绍 http访问urls的方法有get, pos ...

  6. C#实现上传/下载Excel文档

    要求 环境信息:WIN2008SERVER  开发工具:VS2015 开发语言:C# 要求: 1.点击同步数据后接口获取数据展示页面同时过滤无效数据并写入数据库,数据可导出Excel并支持分类导出 2 ...

  7. 内核中通过进程PID获取进程的全部路径

    目录 一丶简介 二丶原理 1.原理 2.代码实现. 一丶简介 我们遇到的Dos路径.如果想转化为NT路径(也就是 C:\xxxx)类似的格式 需要自己实现. 具体原理如下: 二丶原理 1.原理 1.使 ...

  8. 2019强网杯web upload writeup及关键思路

    <?phpnamespace app\web\controller; class Profile{    public $checker;    public $filename_tmp;    ...

  9. TCP的几个知识点

    1. 三次握手.四次挥手 详细查看:https://www.cnblogs.com/amiezhang/p/6703390.html 2. ARQ 协议 ARQ 就是超时重传机制,分为 2 种:停止等 ...

  10. Android中进度条

    <ProgressBar android:id="@+id/progress_bar" android:layout_width="match_parent&quo ...