【C语言】为什么指明数组的列数?
首先,我们拿二维数组为例。二维数组称为矩阵。二维数组在概念上是二维的,但实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数,而数组的行数没有太大关系。因为函数调用时传递的是一个指针,它指向由行向量构成的一维数组。其中每个行向量是具有n(n代表列数)个整型元素的一维数组。
例如如下二维数组:
static char daytab[][] = {
{, , , , , , , , , , , , },
{, , , , , , , , , , , , }
};
在把上述daytab数组作为实参传递给函数时,传递给函数的是一个指向2个对象的指针,其中每个对象是由13个整型元素构成的一维数组。因此如果将数组daytab作为参数传递给函数f,那么f的声明应该写成下列形式:
f(int daytab[][]) { ... }
f(int daytab[][]) { ... }
f(int (*daytab)[]) { ... } //这相当于声明了一个数组,该数组有13个元素,每个元素都是一个指向整型对象的指针。
一般来说,除数组的第一维(下标)可以不指定大小外,其余各维都必须明确指定大小。
在一维存储器中存放二维数组有两种方式:
- 一种是按行排列,即放完一行之后顺次再放入第二行。
- 一种是按列排列,即放完一列之后顺次再放入第二列。
在C语言中,二维数组是按行排列的。
参考资料
[1] http://hi.baidu.com/qfpnptyxswbqtyq/item/03e54cdfb35c444afb57680a
【C语言】为什么指明数组的列数?的更多相关文章
- C语言二维数组作为函数的参数
前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include < ...
- C#获取数组的行和列数程序代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
- C语言中动态分配数组
如何动态的定义及使用数组呢?记得一般用数组的时候都是先指定大小的.当时问老师,老师说是不可以的.后来又问了一位教C++的老师,他告诉我在C++里用new可以做到,一直不用C++,所以也不明白.今天在逛 ...
- C语言多维数组的地址
设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11 它的定义为: int a[3][4]={{0,1,2,3},{4,5 ...
- 【转】C语言中动态分配数组
原文地址:http://blog.chinaunix.net/uid-11085590-id-2914577.html 如何动态的定义及使用数组呢?记得一般用数组的时候都是先指定大小的.当时问老师,老 ...
- C#中如何获取一个二维数组的两维长度,即行数和列数?以及多维数组各个维度的长度?
如何获取二维数组中的元素个数呢? int[,] array = new int[,] {{1,2,3},{4,5,6},{7,8,9}};//定义一个3行3列的二维数组int row = array. ...
- java基础之二维数组不定义列数
有一种特殊的二维数组,它的行数确定,但是每行的列数不确定.这样的的数组实现方法:先创建制定行数,列数缺省的二维数组,然后对数组的每一行重新初始化.举例如下: package day5; //第二种定义 ...
- 基于visual Studio2013解决C语言竞赛题之1037数组求列和
题目 解决代码及点评 /* 功能:已知有三个数组A,B,C,A为5行5列的二维数组,B.C为只有5个元素的一维数组,键盘输入数据的顺序如下: 23,45,6,1,- ...
- C二维字符数组的使用及如何获取二维数组的总行数和总列数!
#include <stdio.h> #include <stdlib.h> int main(){ char str[][30] = {"zhangsan" ...
随机推荐
- 【Python】安装geocoder
C:\Users\horn1\Desktop\python\49-geo>pip install geocoder Collecting geocoder Downloading https:/ ...
- 夏天过去了, 姥爷推荐几套来自smashingmagzine的超棒秋天主题壁纸
夏天就要过去啦, 特别在这个时候,分享几套来自smashingmagazine的秋天主题壁纸,如果,你也喜欢的话, 可以去下载哈~ 更多尺寸壁纸下载 日历版本: 320×480, 640×480, 8 ...
- Mybatis之使用注解开发CRUD
上一篇演示了怎样使用XML来操作Mybatis实现CRUD,可是大量的XML配置文件的编写是很烦人的.因此 Mybatis也提供了基于注解的配置方式,以下我们来演示一下使用接口加注解来实现CRUD的的 ...
- python __setattr__和__getattr__
通过为dict添加__setattr__和__getattr__, 可以属性的语法访问dict的元素 http://www.2cto.com/kf/201507/413971.html class S ...
- SSH使用Log4j
1. 将Jar文件log4j-1.2.14.jar导入项目. 2. 在src文件夹下新建log4j.properties文件: log4j.rootLogger = debug,stdout,D,E ...
- MySQL 内存和CPU优化相关的参数
mysql> SHOW GLOBAL STATUS LIKE 'innodb%read%'; +---------------------------------------+--------- ...
- dpkg 小记
dpkg 安装 dpkg -i to-be-install.deb dpkg 删除 dpkg -r name-of-app dpkg -l 查看有哪些包被安装.其中 ii 标记的包是正常的, rc 标 ...
- 8、java5线程池之动态缓存线程池newCachedThreadPool
JDK文档描述 创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们.对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能.调用 execute 将重用以前构造的线程 ...
- Spring Cloud开发实践 - 03 - 接口实现和下游调用
接口实现 Scot Commons Impl 接口实现模块 scot-commons-impl, 一方面实现了 scot-commons-api 的接口, 一方面将自己暴露为 REST 服务. 有4个 ...
- 微信小程序开发学习资料
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...