c语言二维数组与指针
问题,以下输出的结果是什么,区别在于哪?
- void main()
- {
- int a[][] = { ,,,,,,,,,,, };
- //输出的3个地址都一样,差别在哪?
- printf("\n%x",a);
- printf("\n%x",*a);
- printf("\n%x",&a);
- system("pause");
- }
像我这种野生码农看到这个问题基本懵了,好吧我们先通过一维数组来理解。
- void main()
- {
- int num[] = { ,,,, };
- printf("\n%x", num); //第一个元素的首地址,1个int元素4个字节
- printf("\n%x", &num); //数组的地址,数组5个元素,20个字节。
- //printf("\n%d", (*(&num))[2]); 可以知道 (*(&num))就是数组 {1,2,3,4,5}-> &num是指向整个数组的地址
- //区别
- printf("\n%d", sizeof(*num)); //4 *num 根据类型地址取出内容 => 1 ,4字节
- printf("\n%d", sizeof(*&num));//20 *&num 根据类型地址取出内容
- getchar();
- }
通过上面的例子,可以知道
1. num就是指向数组的首地址,由此可得 *num 就是数组首地址的值 1。
2. &num 就是指向整个数组的地址。
于是我们再来看上面二维数组的例子解答。
- void main()
- {
- int a[][] = { ,,,,,,,,,,, };
- //打印出整个数组的元素和对应的地址
- for (int i = ; i < ; i++)
- {
- for (int j = ; j < ; j++)
- {
- printf("%d,%x ",*(*(a+i)+j), *(a + i) + j);
- }
- printf("\n");
- }
- //3个结果都一样,差别在哪?
- printf("\n%x",a); //a行指针
- printf("\n%x",*a); //a行指针的值 {1,2,3,4}
- printf("\n%x",&a); //整个二维数组的地址
- printf("\n%d",sizeof(*a));// 16 -> *a代表一个行的数组 {1,2,3,4} ,
- printf("\n%d", sizeof(**a));// 4 -> 有上可以推断 **a 代表第一行数组首地址 1
- printf("\n%d", sizeof(*&a));// 48 -> &a代表整个二维数组的首地址,则 *(&a) 取整个二维数组的内容,12个元素,则48 个字节
- system("pause");
- }
c语言二维数组与指针的更多相关文章
- 关于c语言二维数组与指针的个人理解及处理办法。
相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...
- C语言 二维数组(指针)动态分配和释放(转)
C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...
- 二维数组和指针(C语言)
二维数组和指针 二维数组和指针1.二维数组和数组元素的地址若有以下定义:int *p, a[3][4]; 1)二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的 ...
- 程序员之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)
主要内容:二维数组和指针.&*a[i][0]的理解.数组1[e]和e[1] #include <stdio.h> #define NUM_ROWS 10 #define NUM_C ...
- C语言教学--二维数组和指针的理解
对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...
- c语言编程-----指向二维数组的指针
c中如何返回一个指向二维数组的指针 #include <stdio.h> #include <stdlib.h> #define COUNT 3 typedef int (*M ...
- 对二维数组使用指针进行操作的探索(C语言)
/* Name: 对二维数组使用指针进行操作的探索 Copyright: Author: lingr7 Date: 01/12/18 11:55 Description: */ #include< ...
- c语言二维数组传递
c语言二维数组传递,目前我总结三种方法,以及纠正一个不能使用的方法 /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维 ...
- C语言多维数组的指针传递
在C语言中为了节省空间,提高运行速度经常使用指针来完成数组的传递. 对于一维数组而言可以直接传递首地址 而对于二维数组必须在传递时声明是二维数组的指针,并且调用时也要经过一些运算 首先是定义形参: 函 ...
随机推荐
- Winform开发常用控件之DataGridView的简单数据绑定——代码绑定DataSet、DataTable、IList、SqlDataReader
前文介绍了Winform为DataGridView提供的数据自动绑定功能,下面介绍一下采用代码的数据绑定 1.用DataSet和DataTable为DataGridView提供数据源 先上代码 pri ...
- 最大流之dinic
先用bfs预处理出层次图,然后在层次图上用dfs找增广路径,理论复杂度O(n*n*m) const int INF=0xfffffff ; struct node { int s,t,cap,nxt ...
- 博客(第0次作业)—— New Starting Point
一.最理想的师生关系是健身教练和学员的关系,在这种关系中你期望获得来自老师的那些帮助? 正如文章中所说,这些学员的想法得足够强烈, 他/她才会花钱去参加这样的健身活动,每一个来学习的学生, 都是想学 ...
- 替换国内yum源以及pip源
因为一些原因,不论是网络还是啥啥啥的原因,国外的源访问时不时的很慢,这时候我们就可以将国外的源替换为国内源,提高下载速度. yum源替换 环境:centos7(如果你的发行版本不是这个,此方法不保证能 ...
- hasura graphql server (haskell)构建
安装 &&运行pg(docker) version: '3.6' services: postgres: image: postgres environment: - "PO ...
- Window 查看端口进程使用
1. 查看所有端口占用 netstat -ano 2. 查看指定端口占用 netstat -ano | findstar "8080" 其中11152 对应为进程号 3. 查看进程 ...
- pfsense openvpn上网终于通了
先看配置,等会在说过程中遇到的问题: 1.openvpn配置: /var/etc/openvpn/server2.conf下: port 1195 proto tcp dev tap writepid ...
- Ubuntu 16.04 natural scrolling
http://ubuntuhandbook.org/index.php/2016/05/install-ubuntu-tweak-in-ubuntu-16-04/ download ubuntu-tw ...
- WCF揭秘学习笔记(2):数据表示
背景知识 WCF提供了一种语言为软件通信建模,称作服务模型.使用更底层的编程架构提供的类可以从这种语言建立的模型中生成可用的通信软件. 在服务模型使用的语言中,负责通信的软件部分称为服务(servic ...
- VBA7种文档遍历法
Sub 在选定文档最后加入一句话() '遍历文件 Dim MyDialog As FileDialog On Error Resume Next Application.ScreenUpdating ...