当前位置: 首页 > 编程日记 > 正文

C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结

转自:http://blog.163.com/tianhit@yeah/blog/static/165747821201052195212719/

#include<iostream>
using namespace std;

int   fun(int a[][3],int n)     // 其中二维数组形参必须确定数组的第二维的长度,第一维长度可以不定
//int fun(int (*a)[3],int n)   //  和  int   fun(int a[][3],int n)  功能和用法完全相同
{
    int sum=0;
    for (int i=0;i<n;i++)
    {
         for(int j=0;j<3;j++)
         sum=sum+a[i][j];
    }
    return sum;
}

void fun1(int a[2])
{
    int n = sizeof(a); // 因为在实际函数调用时,传递来的实参都是指针,所有这里是对指针求sizeof,
                       // 而指针变量是int的整型变量。在vc++ 6.0中int类型变量占4字节,所以 n肯定是4
    printf("%d/n",n);
}


int fun2(int a[],int n)   //形参中可以不指定一维数组的大小。
{
    int sum=0;
    for(int i=0;i<n;i++)
         sum=sum+a[i];
    return sum;
}



int main()
{
    int b[2][3] = {{1,2,3},{4,5,6}};
    int a[3]={1,2,3};
    int num=0;
    int num2=0;
    int i=2;
    int *p=&i;
        num=fun(&b[0],2);    //ok
    //  num =fun(b,2);  //ok

    //  num=fun(&b[0][0],2);  // error C2664: 'fun' : cannot convert parameter 1 from 'int *' to 'int [][3]'
    //  num=fun(&b,2);        // error C2664: 'fun' : cannot convert parameter 1 from 'int (*)[2][3]' to 'int [][3]'
    //  num=fun(b[0],2);      // error C2664: 'fun' : cannot convert parameter 1 from 'int [3]' to 'int [][3]'
   
        num2=fun2(&a[0],3); // ok
    //    num2=fun2(a,3);  //ok

    //  printf("%d/n",num2);

    //  printf("%d %d %d %d %d %d/n",b[0],&b[0],b[0][0],&b[0][0],b,&b); //只有b[0][0]是数组元素,其他均为地址
    //  结果: 1245032 1245032 1 1245032 1245032 1245032

    //  结论:虽然 b[0],&b[0],&b[0][0],b,&b 的值都相同,但是它们所代表(指向)的类型可能就不一样,其中&b[0]和b所指
    //  向的类型是相同的,b[0]和&b[0][0]的类型可以是认为是相当(注意是相当,不是相同)。
   //  C 语言中,当一维数组作为函数参数的时候,编译器总是把它解析成一个指向其首元素首地址的指针,
  //  当N维数组作为函数参数的时候,编译器总是把它解析成一个指向其首元素(这里的首元素是个N-1维数组)首地址的指针,


    //  printf( "%d/n ",num);
    //    printf("%d %d %d/n",sizeof(*p),sizeof(p),sizeof(b));  // sizeof(b)是求数组里所有元素所占的内存总和

    //  printf("%d %d %d %d/n",*p,p,sizeof(&b[0]),sizeof(b[0]));
          // sizeof(&b[0])是对指针,即数组b的第一个元素(当然它是个长度是3的一维数组)的地址作用
          // sizeof(b[0])是对数组b的第一个元素(当然它是个长度是3的一维数组)的作用,相当于求长度是3的一维数组所有
         // 元素所占内存和
    //  结果:2 1245008 4 12 //其中1245008是p的值,即*p的地址

    //    fun1(a); //ok
    //    fun1(&a[0]);//ok
    //    fun1(&a);// error C2664: 'fun1' : cannot convert parameter 1 from 'int (*)[3]' to 'int []'
        
    //    printf("%d/n",sizeof(a));
        return   0;
}

//*****************************************************************************
//二维数组的引用作形参时,注意事项。看例子
#include<iostream>
using namespace std;

   int   fun(int (&a)[2][3])         //ok,引用作形参,数组作引用形参,必须指定清楚所有维数
//
int  fun(int (&a)[ ][3],int n)     //error C2265: '<Unknown>' : reference to a zero-sized array is illegal
// i
nt  fun(int &a[2][3])             // error C2234: '<Unknown>' : arrays of references are illegal
{

    int sum=0;
    for (int i=0;i<2;i++)
    {
         for(int j=0;j<3;j++)
         sum=sum+a[i][j];
    }
    return sum;
}

int main()
{
    int b[2][3] = {{1,2,3},{4,5,6}};
    int num=0;
    num=fun(b);
    printf("%d/n",num);
    return 0;
}

相关文章:

打破欧美垄断,国防科大斩获“航天界奥林匹克”大赛首冠

整理 | Jane责编 | 一一出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;近日&#xff0c;第十届国际空间轨道设计大赛&#xff08;GTOC X&#xff09;结束并公布最终成绩&#xff0c;中国参赛队国防科技大学与西安卫星测控中心联队&#xff08;NUDT&X…

Hive 中的变量

Hive的变量前面有一个命名空间&#xff0c;包括三个hiveconf&#xff0c;system&#xff0c;env&#xff0c;还有一个hivevar hiveconf的命名空间指的是hive-site.xml下面的配置变量值。system的命名空间是系统的变量&#xff0c;包括JVM的运行环境。env的命名空间&#xff0c;…

你必须非常努力,才能看起来毫不费力

有一群人&#xff0c;他们积极自律&#xff0c;每天按计划行事&#xff0c;有条不紊&#xff1b;他们不张扬&#xff0c;把自己当成最卑微的小草&#xff0c;等待着人生开出花朵的那天。他们早晨5点多起来健身&#xff0c;你在睡觉&#xff1b;7点开始享受丰盛的早餐&#xff0…

cvGetSubRect与cvMul用法

1、对于cvGetSubRect(mat1, mat2, rect)&#xff0c;当用cvGetSubRect函数时&#xff0c;不能事先对mat2申请内存&#xff0c;否则会产生内存泄漏。 只要这样定义mat2即可&#xff1a;CvMat *mat2; mat2 cvCreateMatHeader(imgHeight, imgWidth, CV_64FC1); 2、对于cvGetSubR…

浅谈WPF的VisualBrush

原文:浅谈WPF的VisualBrush首先看看VisualBrush的解释&#xff0c;msdn上面的解释是使用 Visual 绘制区域&#xff0c;那么我们再来看看什么是Visual呢&#xff1f;官方的解释是&#xff1a;获取或设置画笔的内容&#xff0c;Visual 是直接继承自DependencyObject&#xff0c;U…

AI换脸技术再创新高度,DeepMind发布的VQ-VAE二代算法有多厉害?

作者 | beyondma转载自CSDN网站近日DeepMind发布VQ-VAE-2算法&#xff0c;也就是之前VQ-VAE算法2代&#xff0c;这个算法从感观效果上来看比生成对抗神经网络&#xff08;GAN)的来得更加真实&#xff0c;堪称AI换脸界的大杀器&#xff0c;如果我不说&#xff0c;相信读者也很难…

cisco设备常用命令

router> enable 从用户模式进入特权模式 router# disable or exit 从特权模式退出到用户模式router# show sessions 查看本机上的TELNET会话router# disconnect …

opencv图像处理梯度边缘和角点

转自&#xff1a;http://blog.sina.com.cn/s/blog_4b9b714a0100c9f7.html 梯度、边缘和角点 Sobel 使用扩展 Sobel 算子计算一阶、二阶、三阶或混合图像差分 void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size3 ); src 输入图像. dst …

性能全面超数据库专家,腾讯提基于机器学习的性能优化系统 | SIGMOD 2019

腾讯与华中科技大学合作的最新研究成果入选了国际数据库顶级会议SIGMOD的收录论文&#xff0c;并将于6月30日在荷兰阿姆斯特丹召开SIGMOD 2019国际会议上公开发表。入选论文的题目为“An End-to-End Automatic Cloud Database Tuning System Using Deep Reinforcement Learning…

swift 语言评价

杂而不精&#xff0c;一团乱麻&#xff01;模式乱套&#xff0c;不适合作为一门学习和研究语言。 谢谢 LZ 介绍&#xff0c;看完之后更不想用 Swift 了。从 C那里抄个 V-Table 来很先进嘛&#xff1f;别跟 C一样搞什么 STL 就好了&#xff0c;整这么复杂&#xff0c;入个门都需…

Creative Web Typography Styles | Codrops

Creative Web Typography Styles | Codrops. 非常好的文字效果

OpenCV 图像采样 插值 几何变换

转自&#xff1a;http://hi.baidu.com/xiaoduo170/blog/item/6eefc612c9f8e9c6c2fd786f.html InitLineIterator 初始化线段迭代器 int cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2, CvLineIterator* line_iterator, int connectivity8 ); image 带采…

centos 6.* 修改时间

一、查看Centos的时区和时间 1、使用date命令查看Centos时区 [rootVM_centos ~]# date -R Mon, 26 Mar 2018 19:14:03 0800 2、查看clock系统配置文件 [rootVM_centos ~]# cat /etc/sysconfig/clock ZONE"Asia/Shanghai" 3、查看系统的硬件时间&#xff0c;即BIOS时间…

别光发Paper,搞点实际问题

文 / LVS话说几个月前&#xff0c;我参加了一场学术大会&#xff0c;台上的教授不是北大、清华就是浙大、上交大&#xff0c;几位教授不约而同的吐槽招通信、算法和编解码的学生太难了。为什么呢&#xff1f;原来&#xff0c;先不比金融&#xff0c;仅仅与同是IT领域的AI专业就…

spring mvc文件上传小例子

spring mvc文件上传小例子 1.jsp页面 <%page contentType"text/html;charsetUTF-8"%> <%page pageEncoding"UTF-8"%> <% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core"%> <% taglib prefix"fmt…

解密Kernel:为什么适用任何机器学习算法?

作者 | Marin Vlastelica Pogančić译者 | 陆离编辑 | 一一出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;机器学习中Kernel的秘密&#xff08;一&#xff09;本文探讨的不是关于深度学习方面的&#xff0c;但可能也会涉及一点儿&#xff0c;主要是因为…

03-Java的基础语法

一个Java程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。 对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff0c;它的状态有&…

图像处理-仿射变换 AffineTransform

转自&#xff1a;http://fairywangyutang.blog.sohu.com/146834554.html AffineTransform类描述了一种二维仿射变换的功能&#xff0c;它是一种二维坐标到二维坐标之间的线性变换&#xff0c;保持二维图形的“平直性”&#xff08;译注&#xff1a;straightness&#xff0c;即变…

以前初学php用的分页函数

page.php <?php /* *http://www.iiwnet.com/php/ PHP学习 * */ function _PAGEFT($totle, $displaypg 20, $url ) { global $page, $firstcount, $pagenav, $_SERVER; $GLOBALS["displaypg"] $displaypg; if (!$page) $page 1; if (!$url) { $url $_SERVER[…

深度有趣 | 27 服饰关键点定位

简介 介绍如何使用CPM&#xff08;Convolutional Pose Machines&#xff09;实现服饰关键点定位 原理 关键点定位是一类常见而有用的任务&#xff0c;某种意义上可以理解为一种特征工程 人脸关键点定位&#xff0c;可用于人脸识别、表情识别人体骨骼关键点定位&#xff0c;可用…

有答案了!一张图告诉你到底学Python还是Java!你咋看?

2019年&#xff0c;该学Java还是Python&#xff1f;不&#xff0c;实际上应该这样问&#xff1a;都9102年了&#xff0c;难道有谁不想成为Python程序员吗&#xff1f;作为“常青树大佬”Java 和“新晋大佬”Python &#xff0c;经常被人拿来对比&#xff0c;对于刚开始起步学习…

图像二值化----otsu(最大类间方差法、大津算法)(二)

转自&#xff1a;http://blog.stevenwang.name/ostu-threshold-56002.html OTSU算法也称最大类间差法&#xff0c;有时也称之为大津算法&#xff0c;被认为是图像分割中阈值选取的最佳算法&#xff0c;计算简单&#xff0c;不受图像亮度和对比度的影响&#xff0c;因此在数字图…

android同时使用多个library时的问题

剧情是这样&#xff0c;我的app要使用两个library&#xff0c;如&#xff1a;LibraryA&#xff0c;LibraryB。这两个库又都需要support.v4.jar。 由于加载的时间不同&#xff0c;所以两个support.v4.jar不同&#xff0c;出错的提示如下&#xff1a; [2012-09-28 16:37:22 - ] F…

C#版 - Leetcode49 - 字母异位词分组 - 题解

C#版 - Leetcode49 - 字母异位词分组 - 题解 Leetcode49.Group Anagrams 在线提交:https://leetcode.com/problems/group-anagrams/ 题目描述 给定一个字符串数组&#xff0c;将字母异位词组合在一起。字母异位词指字母相同&#xff0c;但排列不同的字符串。 示例: 输入: [&quo…

来学习几个简单的Hive函数吧!

作者 | 石晓文转载自小小挖掘机&#xff08;ID:wAIsjwj&#xff09;咳咳&#xff0c;今天来介绍一下几个Hive函数吧&#xff0c;先放一张我登哥划水的照片&#xff0c;希望大家也做一只自由的鱼儿&#xff0c;在知识的海洋里游呀游&#xff0c;嘻嘻&#xff01;今天我们来介绍几…

OpenCV编程案例:使用轮廓函数检测连通区域

转自&#xff1a;http://www.aiseminar.cn/bbs/thread-617-1-1.html 此案例位于CXCORE中cvDrawContours函数介绍部分给出。此程序首先载入一个二值图像文件&#xff0c;然后使用函数再次二值化确认。接着使用cvFindContours找到轮廓&#xff0c;然后使用填充方式绘制轮廓线内部…

[译]Web Inspector开始支持CSS区域

最近,开发人员和设计师们可以在WebKit中尝试使用CSS区域特性了,我们认为是时候给他们一些开发工具了.最新版本的Chrome Canary中的web inspector现在已经支持下面这些功能: 查找文档中所有的命名流.显示每个命名流的内容和区域链.高亮页面中的CSS区域,就像是把鼠标放在web insp…

这或许是东半球分析十大排序算法最好的一篇文章

作者 | 不该相遇在秋天转载自五分钟学算法&#xff08;ID:CXYxiaowu&#xff09;前言本文全长 14237 字&#xff0c;配有 70 张图片和动画&#xff0c;和你一起一步步看懂排序算法的运行过程。预计阅读时间 47 分钟&#xff0c;强烈建议先收藏然后通过电脑端进行阅读。No.1 冒泡…

opencv使用cvFindContours提取联通域

转自&#xff1a;http://hi.baidu.com/irmosgarden/blog/item/8ce0174c54b307fad72afcbc.html // m_imgFeature为黑白目标图像&#xff0c;白色为前景&#xff0c;黑色为背景 // 注意此函数会修改m_imgFeature内容。若其不可更改&#xff0c;应另建立副本 // 1. count contou…

朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素

朱晔的互联网架构实践心得S1E9&#xff1a;架构评审一百问和设计文档五要素 【下载文本PDF进行阅读】 本文我会来说说我认为架构评审中应该看的一些点&#xff0c;以及我写设计文档的一些心得。助你在架构评审中过五关斩六将&#xff0c;助你写出能让人收藏点赞的设计文档。 技…