【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" ...
随机推荐
- ESXI安装时卡在loading ipmi_si_drv的解决方案
参考:http://x220ak.hatenablog.com/ 在这个界面按下shift+O,输入runweasel noipmiEnabled即可跳过loading ipmi_si_drv的加载
- OpenGL ES 3.0之顶点缓冲
所谓顶点缓冲就是直接将顶点数据存储在gpu的一段缓冲区,不需要从cpu拷贝到gpu.提高了程序的运行效率. 操作步骤 1.创建顶点缓冲对象 GLuint vertexBufferID; 2.分配空间 ...
- C++ 函数适配器
1.考虑下面的需求,在一个int的vector中,找出一个比5的元素,容易想到的解决办法,定义一个方法对象,使用模板,如下:vector<int>::iterator iter = fin ...
- Unity3D 学习 创建简单的按钮、相应事件
选择file -->new project 然后保存到相应的地方 下面是这个刚创建的工程效果图. 然后创建一个C# Script ||定位到最左下角找到 assets --> creat ...
- iOS开发点滴 - 关闭键盘
有时候系统显示的键盘会挡住视图中某些重要的控件,这个时候当用户按下换行键,就应该取消UITextField对象的第一响应(First Responder)状态而关闭键盘. 1. 首先,视图控制器必须遵 ...
- Converter Standardalone 5 versus Converter Boot CD
The new Converter Standalone 5 lacks the Converter Boot CD. Fortunately you can still use the old ve ...
- hdu4403A very hard Aoshu problem 线段树
//给一个长度为大于2小于15的字符串 //在当中间加'+'或'='使得其成为一个等式的方法的个数 //枚举等号位置.暴力搜索加号加的位置 #include<cstdio> #includ ...
- linux高精度struct timespec 和 struct timeval
一.struct timespec 定义: typedef long time_t;#ifndef _TIMESPEC#define _TIMESPECstruct timespec {time_t ...
- ViewPage+frament不预载入下一个Frament数据解决的方法
在做一个ViewPage+Frament 滑动数效果,当滑动到每一页时载入哪一页的数据,可是ViewPage会预载入下一也数据.这个问题之前做项目是一直未解决,今天找到一个方法一下子就解决的这个问题, ...
- 解决 nfs挂载错误wrong fs type, bad option, bad superblock
yum install nfs-utils mount -t nfs 192.168.1.153:/taimei /taimei