不规则数组是每一行的列数不一样的二维数组,其原理如下图所示,图中的数组有3行,每行有不同的列数。

在了解如何创建不规则数组之前,让我们先看一下用复合字面量创建的二维数组。复合字面量是一种C构造,前面看起来像类型转换操作,后面跟着花括号括起来的初始化列表。下面是整数常量和整数数组的例子,我们将其作为声明的一部分:

下面的声明把数组声明为整数指针的数组,然后用复合字面量语句块进行初始化,由此创建了数组arr1。

这个数组有3行3列,将数组元素用数字0到8按行–列顺序初始化。下图说明了数组的内存布局。

下面的代码片段打印每个数组元素的地址和值:

执行后会得到如下输出:

稍微修改一下声明就可以得到一个不规则数组,就是图4-18中展示的那个。数组声明如下:

我们用了3个复合字面量声明不规则数组,然后从0开始按行–列顺序初始化数组元素。下面的代码片段会打印数组来验证创建是否正确,因为每行的列数不同,所以需要3个for循环:

输出如下:

下图说明了这个数组的内存布局。

在这些例子中,我们访问数组内容时用的是数组表示法而不是指针表示法,这样更易读,也好理解。不过,也可以用指针表示法。

复合字面量在创建不规则数组时很有用,不过访问不规则数组的元素比较别扭,上面的例子就用了3个for循环。如果有一个单独的数组来维护每行的长度,那么这个例子就可以简化。你可以在C中创建不规则数组,不过要考虑好它能起的作用是否值得花费相应的精力。

c语言不规则窗口,C语言不规则数组和指针相关推荐

  1. c语言中error c2109 是什么错,求c语言改错 error C2109: 下标要求数组或指针类型?...

    求c语言改错 error C2109: 下标要求数组或指针类型? /*魔方阵*/ #include int main() { int i,j,a,n; int arr[100][100]; print ...

  2. C语言下标要求数组或指针,c语言改错 error C2109: 下标要求数组或指针类型怎么改?...

    /*魔方阵*/ #include int main() { int i,j,a,n; int arr[100][100]; printf("请输入n,n为100内奇数\n"); s ...

  3. c语言数字下标错误怎么改,c语言改错 error C2109: 下标要求数组或指针类型怎么改?...

    /*魔方阵*/ #include int main() { int i,j,a,n; int arr[100][100]; printf("请输入n,n为100内奇数\n"); s ...

  4. C语言结构体里的成员数组和指针

    单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...

  5. C语言高级编程:二维数组、指针的指针、数组指针、指针数组

    1. 定义 int **p;  指针的指针 int (*p2)[5];  数组指针,指向一个数组 int *array[5];  指针数组,是一个int *类型数组 int array2[3][5]; ...

  6. c语言数组与指针编程源码,C语言编程(练习9:数组与指针)

    题目:有 5 个字符串,首先将它们按照字符串中的字符个数由小到大排列,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格).要求:利用字符串指针和指针数组实现. 代码实 ...

  7. C语言输入输出字符串(一般方式,数组,指针)

    1.一般的输入输出 (1) #include<stdio.h> #define N 10int main(){char a[N];gets(a);//输入puts(a);//输出} (2) ...

  8. c语言二维数组 ppt,C语言二维数组与指针.ppt

    C语言二维数组与指针.ppt 好好考,全国计算机等级考试 二级C语言,第12讲 二维数组与指针,二维数组的定义 数组元素的引用及初始化 二维数组和指针 二维数组名和指针数组作为实参 二维数组程序举例 ...

  9. 【C语言】深度探索offsetof,解析结构体的成员数组和指针

    目录 一.offsetof的功能 二.自定义offsetof 三.探索结构体 3.1结构体中的成员 3.2结构体指针和数组 该篇博客主要讲了自定义offsetof是如何实现的,为什么要这样写,以此沿生 ...

最新文章

  1. screen史上最全教程
  2. EXCEL 中找出两个sheet相同列
  3. 意料之外,也是情理之中 - 我的自由职业之旅
  4. 利用jQuery实现的Ajax 验证用户名是否存在
  5. 为什么要使用面向对象编程
  6. Nginx关于日志记录实例应用
  7. vim amp; emacs color Scheme
  8. 微信小程序怎么反编译,获取微信小程序源码
  9. 《大数据之路:阿里巴巴大数据实践》-第2篇 数据模型篇 -第10章 维度设计
  10. Dnsmasq+ipset+iptables基于域名的流量管理
  11. 微信授权文件放到域名根目录下
  12. android的listview分组显示的时候layout_marginTop失效的解决办法
  13. 考研英语 单词常见前后缀/词根
  14. 电力负荷预测三篇综述总结
  15. 【Python自学笔记】报错No module Named Wandb
  16. 读万卷书,写万行代码
  17. 2022年互联网行业薪酬趋势报告
  18. VR线上智能园区3D可视化电子沙盘工厂大数据平台
  19. linux下查询主机名和主机ID
  20. 干货||个人经历:一个程序员是如何把自己公司搞垮的?

热门文章

  1. 搞定WordPress的日志自动截断
  2. C# 利用.NET 升级助手将.NET Framework项目升级为.NET 6
  3. 使用identity+jwt保护你的webapi(二)——获取jwt token
  4. 有BUG!!!慎用default文本
  5. ASP.NET Core 单元测试:如何Mock Url.Page()
  6. 跟我一起学Redis之Redis事务简单了解一下
  7. .NET架构小技巧(2)——访问修饰符正确姿势
  8. 壹佰文章总结| 关于ASP.NETCore的分享之路
  9. 基于Docker的Consul服务发现集群搭建
  10. DI是实现面向切面和面向抽象的前提