一、不规则数组:每一行的列数不相等

    1、复合字面量:

      1)、复合字面量是一种C构造

      2)、外形和数组声明差不多,写法与类型转换一样,(int[3]){10, 20, 30,}

      3)、将多个复合字面量可以组合为不规则数组

    2、特征:

      1)、使用复合字面量声明规则二维数组

  1. #include <stdio.h>
  2.  
  3. int main(int argc, char **argv)
  4. {
  5. int (*(arr1[])) = {
  6. (int[]){, , ,},
  7. (int[]){, , ,},
  8. (int[]){, , ,},
  9. };
  10. for(int i = ; i < ; i++){
  11. for(int j = ; j < ; j++){
  12. printf("arr1[%d][%d] address: %p value: %d\n", i,j, &arr1[i][j], arr1[i][j]);
  13. }
  14. printf("\n");
  15. }
  16.  
  17. return ;
  18. }

      2)、使用复合字面量声明不规则二维数组

  1. #include <stdio.h>
  2.  
  3. int main(int argc, char **argv)
  4. {
  5. int (*(arr1[])) = {
  6. (int[]){, , , ,},
  7. (int[]){, ,},
  8. (int[]){, , ,},
  9. };
  10.  
  11. int col[] = {, , ,};
  12.  
  13. for(int i = ; i < ; i++){
  14. for(int j = ; j < col[i]; j++){
  15. printf("arr1[%d][%d] address: %p value: %d\n", i,j, &arr1[i][j], arr1[i][j]);
  16. }
  17. printf("\n");
  18. }
  19.  
  20. return ;
  21. }

      3)、使用复合字面量声明规则二维数组,使用指针表示法访问

  1. #include <stdio.h>
  2.  
  3. int main(int argc, char **argv)
  4. {
  5. int (*(arr1[])) = {
  6. (int[]){, , ,},
  7. (int[]){, , ,},
  8. (int[]){, , ,},
  9. };
  10. for(int i = ; i < ; i++){
  11. for(int j = ; j < ; j++){
  12. printf("arr1[%d][%d] address: %p value: %d\n", i,j, *(arr1 + i) + j, *(*(arr1 + i) + j));
  13. }
  14. printf("\n");
  15. }
  16.  
  17. return ;
  18. }

      4)、使用复合字面量声明不规则二维数组,使用指针表示法访问

  1. #include <stdio.h>
  2.  
  3. int main(int argc, char **argv)
  4. {
  5. int (*(arr1[])) = {
  6. (int[]){, , , ,},
  7. (int[]){, ,},
  8. (int[]){, , ,},
  9. };
  10.  
  11. int col[] = {, , ,};
  12.  
  13. for(int i = ; i < ; i++){
  14. for(int j = ; j < col[i]; j++){
  15. printf("arr1[%d][%d] address: %p value: %d\n", i,j, *(arr1 + i) + j, *(*(arr1 + i) + j));
  16. }
  17. printf("\n");
  18. }
  19.  
  20. return ;
  21. }

      5)、不规则数组的访问可以使用多个for循环输出。

    

26深入理解C指针之---不规则数组与指针的更多相关文章

  1. C++笔记-数组指针/二维数组转换指针

    参考资料: 1. 作者 BensonLaur  :https://www.cnblogs.com/BensonLaur/p/6367077.html 2. https://blog.csdn.net/ ...

  2. C基础知识(3):指针--概念、数组中指针的递增/递减、指针数组&数组指针、指向指针的指针

    指针是一个变量,其值为另一个变量的地址. 所有指针的值的实际数据类型,不管是整型.浮点型.字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数. 下面从4个代码例子分别讲述以下 ...

  3. [C++]指针和指向数组的指针[一维数组与指针]

     1.一维数组与指针      形如:int型 数组 a[10]                1)&a[0]  地址常量;地址类型:int *型   ; 存储数组a的首地址          ...

  4. #运算符、不同的指针类型、数组和指针、指针运算、堆、栈、静态区、只读区、下标VS指针

    #运算符:用于在预编译期将宏参数转换为字符串 #define CONVERS(x)  #x   //注:没用双引号包括. 不同类型的指针占用的内存空间大小相同. 局部变量 定义: a[5]; 打印a[ ...

  5. C语言数组指针(指向数组的指针)

    注意:数组指针的定义,与指针数组的区别 转载:http://c.biancheng.net/cpp/biancheng/view/162.html 指向多维数组元素的指针变量 ① 指向数组元素的指针变 ...

  6. C++——指针2-指向数组的指针和指针数组

    7.4 指向数组元素的指针 声明与赋值 例:int a[10], *pa; pa=&a[0]; 或 pa=a[p1] ; 通过指针引用数组元素,经过上述声明及赋值后: *pa就是a[0],*( ...

  7. int (*p)[4] p 是二级指针 二维数组 二级指针 .xml

    pre{ line-height:1; color:#2f88e4; background-color:#e9ffff; font-size:16px;}.sysFunc{color:#3d7477; ...

  8. [C++]数组与指针[二维数组与指针]

  9. 深入理解C/C++数组和指针

    C语言中数组和指针是一种很特别的关系,首先本质上肯定是不同的,本文从各个角度论述数组和指针. 一.数组与指针的关系数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值.数组可以在某 ...

随机推荐

  1. Mutations-freecodecamp算法题目

    Mutations(比较字符串) 要求 如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true. 不用考虑大小写和字符顺序 思路 将数组中的两个字符串小写化 将第二个数组元素(第二 ...

  2. 51nod——2502最多分成多少块

    数据范围好小... 题目中没说要升序降序,不过样例解释里可以看出是要升序. #include <bits/stdc++.h> using namespace std; ],b[],visi ...

  3. 洛谷 P5015 标题统计

    第一道题很简单,标签:字符串.模拟. 只需要一个判断去除空格就对了: if(a[i]!=' ' && a[i]!='\n') v++; code: #include<iostre ...

  4. Linux下配置Django_Apache_Mysql环境(CentOS 7.5)

    本文将介绍如何在Linux上部署Django + Mysql + Apache环境.我们知道,Django内置的http服务器只能工作在单线程下,做开发和调试时候是可以的,但是生产环境通常都会有多用户 ...

  5. robotframework的列表与字典

    这里以Get Element Size为例,Selenium2Library返回的是列表,AppiumLibrary返回的是字典. 列表用 ${width}获取:字典用 &{ui}[width ...

  6. Survey lists 10 most innovative cities

    From China Daily Beijing and Shanghai are among the 10 most innovative cities in the world, based on ...

  7. Linux异常体系之stubs_offset

    转自 http://www.xuebuyuan.com/2208550.html 在ARM V4及V4T以后的大部分处理器中,中断向量表的位置可以有两个位置:一个是0x00000000,另一个是0xf ...

  8. golang json 示例

    jsonStr, err := client.Get( deviceIdKey ).Result() if err == redis.Nil { deviceIds = []string{device ...

  9. 网页静态化解决方案Freemarker

    序言: 沉淀了三个月,逐步将自己最近两年在公司中用到的技术和知识点,重新整理归纳了下,对比以前可以发现,现在技术更新越来越快,也越来越成熟,在互联网企业,用到的技术也更先进,更领先,比如微服务.分布式 ...

  10. JS实现——贪吃蛇

    把以下代码保存成Snake.html文件,使用Google或360浏览器打开 <!DOCTYPE HTML> <html> <head> <meta char ...