【426】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 传递数组给函数的更多相关文章
- ajax向后台传递数组参数并将后台响应的数据赋值给一个变量供其它插件使用
1.在js中封装ajax向后台传递数组参数函数 //combogrid * * @Description 封装ajax向后台传递数组参数并将后台响应的数据赋值给一个变量方便其他插件使用该数据函数 * ...
- c语言函数传递数组
1.传递数组,打印不出来 #include <stdio.h> void solve() { printf(]); } int main() { int i; ;i<n;i++) { ...
- C++ 数组作为函数参数时,传递数组大小的方法
废话不多说,先上错误示范: void fun(int arr[arr_num]) { // ... } int main() { // ... int *arr = new int[10]; fun( ...
- JavaScript中常见的数组操作函数及用法
JavaScript中常见的数组操作函数及用法 昨天写了个帖子,汇总了下常见的JavaScript中的字符串操作函数及用法.今天正好有时间,也去把JavaScript中常见的数组操作函数及用法总结一下 ...
- C语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
- C语言二维数组作为函数的参数
前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include < ...
- jquery ajax传递数组给php
写成:var data = {'item[]':item}; $.post(url,data,function(return_data) 写成item:item会导致数据缺失. 更多:http://w ...
- C语言数组作为函数参数
数组可以作为函数的参数使用,进行数据传送. 数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用:另一种是把数组名作为函数的形参和实参使用. 数组元素作函数实参 数组元素就是下标变量, ...
- jQuery数组处理函数
写在前面: jQuery的数组处理函数整理如下,如有补充和建议,欢迎评论交流~ 1.$.trim(value) 从value中删除任何前导或尾随的空白字符 2.$.each(containe ...
随机推荐
- ubuntu apache2.4.7配置白名单
1.仅允许192.168.1.1访问,此处需要注意apache2.2和2.4版本之后白名单配置的方法是不一样的 <Directory /var/www/> Options FollowSy ...
- c++中如何使用memset()
转载链接1 转载链接2
- 从零实现jQuery的extend
前言 jQuery 的 extend 是 jQuery 中应用非常多的一个函数,今天我们一边看 jQuery 的 extend 的特性,一边实现一个 extend! extend 基本用法 先来看看 ...
- Centos 7 安装 dotnet 环境
Centos 7 安装 dotnet 环境 下载官方 rpm yum 源 直接 yum install 安装rpm -Uvh https://packages.microsoft.com/confi ...
- Nginx 安装配置【必须把文件到放到机器上】
[必须把所有下载的gz文件到放到机器上:编译] 1.安装nginx之前的编译软件 yum -y install make zlib zlib-devel gcc-c++ libtool openss ...
- noi.ac #37 dp计数
#include<algorithm> #include<cstring> #include<cstdio> #include<iostream> ty ...
- 如何在Eclipse中写Processing的sketch
有时候人们需要写更复杂的sketch,此时Processing提供的IDE就略显单薄,下面将介绍如何在eclipse中开发Processing. 一共分4步: 一.搭建环境:安装JRE.JDK.Ecl ...
- 中山纪中集训Day5叒是测试(划淼)
A组T1 矩阵游戏(game) 九校联考24OI__D1T1 问题描述 LZK发明一个矩阵游戏,大家一起来玩玩吧,有一个N行M列的矩阵.第一行的数字是1,2,…M,第二行的数字是M+1,M+2…2*M ...
- 读取本地word 浏览器下载(设置编码格式)
String filePath = "C:\\word\\报告.doc"; BufferedWriter bos = null; BufferedReader bis = null ...
- GDI+ Image 读取内存二进制流显示图片
int iBmpSize = cd.nTotleLen; HGLOBAL hMemBmp = GlobalAlloc(GMEM_FIXED, iBmpSize); IStream* pStmBmp = ...