为什么80%的码农都做不了架构师?>>>   

1. 关于数组的首地址:


#include <stdio.h>int main(void)
{char cs[2][3] = {{'A','B','C'},{'D','E','F'}};char *p1,*p2,*p3,*p4;p1 = p2 = p3 = p4 = NULL;/* 下面四个指针都是指向了同一个地址 */p1 = &cs[0][0]; /* 这个最好理解 */p2 = &cs[0];p3 = &cs;p4 = cs;        /* 这个最方便   */printf("%p\n%p\n%p\n%p\n", p1, p2, p3, p4);    /* 显示地址 */printf("\n%c %c %c %c\n", *p1, *p2, *p3, *p4); /* 显示内容 */getchar();return 0;
}

2. 数组其他元素的地址:



例子中, 数组的元素在内存中应该是这样排列的:

[0][0] [0][1] [0][2] [1][0] [1][1] [1][2]

下面是通过指针的方式获取数组的第三个元素:


#include <stdio.h>int main(void)
{int nums[2][3] = {{11, 12, 13},{21, 22, 23}};int *p1,*p2;p1 = p2 = NULL;p1 = &nums[0][2];p2 = nums;p2 = p2 + 2;
//    p2 = (int *)nums + 2; /* 或者用这一句替换上面两行 */printf("%d, %d\n", *p1, *p2);getchar();return 0;
}

3. 遍历数组的普通方法:


#include <stdio.h>int main(void)
{int nums[2][3] = {{11, 12, 13},{21, 22, 23}};int i,j;for (i = 0; i < 2; i++) {for (j = 0; j < 3; j++) {printf("%d\n", nums[i][j]);}}getchar();return 0;
}

4. 通过指针遍历数组:


#include <stdio.h>int main(void)
{int nums[2][3] = {{11, 12, 13},{21, 22, 23}};int *p = nums;int i;for (i = 0; i < 6; i++) {printf("%d\n", *(p+i));}getchar();return 0;
}
#include <stdio.h>int main(void)
{char cs[2][3] = {{'A','B','C'},{'D','E','F'}};char *p = cs;unsigned i;    for (i = 0; i < sizeof cs / sizeof cs[0][0]; i++) {printf("%c\n", *p++);}getchar();return 0;
}
#include <stdio.h>int main(void)
{char cs[2][3] = {{'A','B','C'},{'D','E','F'}};int i;for (i = 0; i < 6; i++) {printf("%c\n", *(*cs + i)); // *cs 是什么? 看下例}getchar();return 0;
}

5. 再探数组的指针地址:


#include <stdio.h>int main(void)
{char cs[2][3] = {{'A','B','C'},{'D','E','F'}};//在本例中(二维数组)// cs 是指向数组 cs[0] 的地址// *cs 是指向 cs[0][0] 的地址printf("%p, %p\n", cs, *cs);// **cs 指向 cs[0][0] 的值printf("%c, %c\n", **cs, cs[0][0]);   getchar();return 0;
}

6. 使用指针遍历三维数组:


#include <stdio.h>int main(void)
{char cs[2][2][3] = {{{'A','B','C'},{'D','E','F'}},{{'1','2','3'},{'4','5','6'}}};int i;int count = sizeof cs / sizeof cs[0][0][0];for (i = 0; i < count; i++) {printf("%c\n", *(**cs + i));}getchar();return 0;
}

7. 遍历多维数组还是用指针变量更容易理解:


#include <stdio.h>int main(void)
{char cs[2][2][3] = {{{'A','B','C'},{'D','E','F'}},{{'1','2','3'},{'4','5','6'}}};char *p = (char *)cs;  /* 相对上面的例子, 这里加了类型转换; 这样编译器就没有提示了 */int i;int count = sizeof cs / sizeof cs[0][0][0];for (i = 0; i < count; i++) {printf("%c\n", *p++);}getchar();return 0;
}

转载于:https://my.oschina.net/hermer/blog/319305

学点 C 语言(22): 数据类型 - 多维数组与指针相关推荐

  1. c语言多维数组指针地址讲解,C语言入门之多维数组的指针变量

    一.多维数组地址的表示方法 设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11 设数组a的首地址为1000,各下标变量的首地址及其值如图所示. 在前面曾经介绍过, ...

  2. 三维数组地址计算_C语言进阶之路:数据类型 - 多维数组与指针!我的心中只有学习!...

    1. 关于数组的首地址: 2. 数组其他元素的地址: 例子中, 数组的元素在内存中应该是这样排列的: [0][0] [0][1] [0][2] [1][0] [1][1] [1][2] 下面是通过指针 ...

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

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

  4. c语言字符串二维数组的动态分配应,C语言中动态分配二维数组复习过程.doc

    C语言中动态分配二维数组复习过程.doc C语言中动态分配二维数组在C中动态分配内存的,对于单个变量,字符串,一维数组等,都是很容易的.C中动态分配二维数组的方法,很少有C语言书中描述,我查找了有的C ...

  5. (c语言)编程输出二维数组中元素的最大值,要求用指针实现。

    (c语言)编程输出二维数组中元素的最大值,要求用指针实现. #include<stdio.h> #include<stdlib.h> #define N 6 //行数 #def ...

  6. 二维数组在c语言中的作用,C语言中的二维数组

    1.二维数组的定义和引用 一. 数据类型 数组名[常量表达式1][常量表达式2]; (1)假如有个二维数组array[n][m],则行下标的取值范围0~n-1 (2)列下标的取值范围0~m-1 (3) ...

  7. 2022秋季C语言专题实验04-二维数组

    2022秋季C语言专题实验04-二维数组 1 找鞍点 2 刮刮彩票 7-3 矩阵运算 7-4 判断上三角矩阵 7-5 求矩阵的局部极大值 7-6 打印杨辉三角 7-7 矩阵A乘以B 7-8 矩阵列平移 ...

  8. c++如何打印一维数组首地址_C语言之二维数组和指针的结合

    最近在练习 C 语言计算机二级的程序设计题,碰到了二维数组和指针的结合,当时怎么调试都不对,自己也记不清楚该怎么用了就跑去看书翻资料重新复习.自己纠结的问题是二维数组 int a[3][4]的数组名是 ...

  9. 纯c语言实现动态分配多维数组的方法

    http://etdata.blogbus.com/logs/2232838.html 转载自Fish-Bowl 普通的动态内存分配只能分配一维的数组: 例如: #define ARRAY_SIZE  ...

最新文章

  1. httpd-2.2和httpd-2.4安装部署
  2. uva计算机水平,UVA 12096 集合栈计算机
  3. python 数据字典用法_python数据字典的操作
  4. NYOJ-水池数目(dfs)
  5. [转]Java游戏引擎
  6. PHP注入漏洞(附代码,具体步骤)
  7. [转载] python中numpy库的使用
  8. unity下载教育版_新的现场学习系列为Unity教育工作者提供支持
  9. SQL Server 代码颜色
  10. 商业方向的大数据专业_大数据行业5个职位方向
  11. 家庭宽带多运营商接入方案
  12. SparkLink星闪技术之SLB概述
  13. 碧蓝航线经济系统的流程图
  14. 【财务】FMS财务管理系统---审计流程
  15. python有道翻译接口-Python调用有道翻译api实现翻译
  16. CSDN学习业务年终总结
  17. 国产嵌入式操作系统发展思考 | 何小庆
  18. maven安装及环境部署(IDEA)
  19. 闯关创业板的宝宝巴士:早教公司的面子,广告公司的里子
  20. 2021 年 JS 烧脑面试题大赏

热门文章

  1. 敏捷个人A1组第二次讨论纪要 你在事业上打算何去何从?
  2. 2003单网卡实现***,nat共享网络
  3. flex读取bolg的代码
  4. 工业环境软件套件 CODESYS web 服务器被曝严重的RCE漏洞
  5. ArrayList和LinkedList的插入删除性能差距到底有多大
  6. docker machine介绍和使用
  7. [仁润云技术团队]并发编程-(1)基本概念
  8. Python面试必须要了解的15个问题
  9. 10.2 广州集训 Day1
  10. Numpy 基本除法运算和模运算