二维数组是二级指针pointer to pointer!
二维数组居然是个类似于二级指针(pointer to pointer)的东西,十分震惊!
#include <stdio.h>
int main()
{
int a[][]={{,,,},{,,,},{,,,}};
printf("&a:%d,&a[0]:%d \n",&a,&a[]);
printf("a:%d,a[0]:%d \n",a,a[]);
printf("*a:%d,*a[0]:%d \n",*a,*a[]);
printf("**a:%d \n",**a);
return ;
}
运行结果:
&a:2686672,&a[0]:2686672
a:2686672,a[0]:2686672
*a:2686672,*a[0]:1
**a:1
由此可见 a[0][0]是一个整型变量,a[0]是一个指针(pointer),a是个二级指针(pointer to pointer)
并且a,a[0],a[0][0]的地址是相同的,但a依然是指向a[0]地址的指针,a[0]依然是指向a[0][0]的指针
因此二维数组的操作也变复杂点了,以下一道题用以验证及训练
设有如下数组定义: int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 计算下面各项的值(设一个int类型数占四个字节)。
(1)a[2][1] (2)a[1] (3)a (4)a+1
(5)*a+1 (6)*(a+1) (7)a[2]+1 (8)*(a+1)+1
(9)*(*(a+2)+2)
#include <stdio.h>
int main()
{
int a[][]={{,,,},{,,,},{,,,}};
printf(" a[1]:%d \n a:%d \n *a:%d \n a+1:%d \n *a+1:%d \n *(a+1):%d \n a[2]+1:%d \n *(a+1)+1:%d \n",a[],a,*a,a+,*a+,*(a+),a[]+,*(a+)+);
printf(" *(*(a+2)+2):%d \n",*(*(a+)+));
return ;
}
运行结果:
a[1]:2686688
a:2686672
*a:2686672
a+1:2686688
*a+1:2686676
*(a+1):2686688
a[2]+1:2686708
*(a+1)+1:2686692
*(*(a+2)+2):21
小结:
二级指针 指针 整型变量
a → a[0] → a[0][0]
a[1] → a[1][0]
a[2] → a[2][0]
可以推广到一维数组就是一个指针,三维数组是个三级指针了
验证一维数组是指针(pointer)
#include <stdio.h>
int main()
{
int a[]={,,};
printf("&a:%d,&a[0]:%d \n",&a,&a[]);
printf("a:%d,a[0]:%d \n",a,a[]);
printf("*a:%d \n",*a);
return ;
}
运行结果:
&a:2686708,&a[0]:2686708
a:2686708,a[0]:1
*a:1
二维数组是二级指针pointer to pointer!的更多相关文章
- C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)
前提:一维数组和一维指针为什么可以替换使用? ] = { , , }; int *p = a; ; i < ; i++) printf("%d ", *(p + i)); 上 ...
- C++ 二维数组(双重指针作为函数参数)
本文的学习内容参考:http://blog.csdn.net/yunyun1886358/article/details/5659851 http://blog.csdn.net/xudongdong ...
- C语言笔记(二维数组与数值指针)
一.关于二维数组和二维数组区别 (1)一维数组在内存中是连续分布存储的,同样,二维数组也是在内存连续存储的.所以从内存的角度来分析,一维数组和二维数组其实没有本质区别. (2) 二维数组可以使用一维数 ...
- C语言二维数组中的指针问题
#include "stdio.h" void main() { int a[5][5]; int i,j; for (i=0;i<5;i++) { for (j=0;j&l ...
- 论C语言中二级指针和二维数组之间的区别
刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...
- C/C++二维数组名和二级指针
转载 :https://blog.csdn.net/wu_nan_nan/article/details/51741030 作者:吴一奇 1. 指针1.1 一个指针包含两方面:a) 地址值:b) 所 ...
- [转] C语言多维数组与多级指针
http://c.biancheng.net/cpp/html/477.html 多维数组与多级指针也是初学者感觉迷糊的一个地方.超过二维的数组和超过二级的指针其实并不多用.如果能弄明白二维数组与二级 ...
- C/C++怎样传递二维数组,转载自CSDN
用二维数组作为参数传递(用二维数组处理矩阵),但是希望接受传递二维数组参数的函数可以处理任意维度的数组(希望矩阵的行数和列数都是不固定的). [以下转帖] ---------------------- ...
- C/C++如何传递二维数组?
用二维数组作为参数传递(用二维数组处理矩阵),但是希望接受传递二维数组参数的函数可以处理任意维度的数组(希望矩阵的行数和列数都是不固定的). ----------------------------- ...
随机推荐
- 再看GS线程
再看GS线程 void GameServer::ProcessThreadTry() { ; packet rcvPkt; rcvPkt.data = * ]; //该事件工厂主要创建了两个定时器1. ...
- 【BZOJ4605】崂山白花蛇草水 权值线段树+kd-tree
[BZOJ4605]崂山白花蛇草水 Description 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实力,他轻松地进了 ...
- CF(439E - Devu and Birthday Celebration)莫比乌斯容斥
题意:将n个糖果插入f-1个挡板分成f分(a1,a2,a3...af). 问有多少种分法能够使得gcd(a1,a2,a3...af)=1; 解法.莫比乌斯容斥,首先按1为单位分,这时候有C(n-1,f ...
- .htaccess技巧: URL重写(Rewrite)与重定向(Redirect) (转)
目录 Table of Contents 一.准备开始:mod_rewrite 二.利用.htaccess实现URL重写(rewrite)与URL重定向(redirect) 将.htm页面映射到.ph ...
- Elasticsearch5 及 head插件 安装说明
Elasticsearch5.X及 head插件 安装说明: 1.下载elasticsearch安装文件: a) 下载官方源码: https://artifacts.elastic.co/downlo ...
- Cmder配置
中文乱码和重叠 当我们使用ls命令查看文件目录时,发现,中文被显示成了一些奇怪的乱码,将以下几行代码配置在cmder/config/user-aliases下即可解决问题: l=ls --show-c ...
- 如何浏览github上所有的公开的项目?
github 上面项目多如牛毛,没有维护的.没有意义的或太过偏门的项目也是数不胜数,所以直接按照字母或者更新顺序浏览实在没什么意义. 有一个做法是去 github 搜 awesome list,比如通 ...
- hibernate 一对多 级联 保存修改 删除
一对多,一端设置: <set name="TWorkorderHistories" inverse="true" cascade="all&qu ...
- Python爬虫 —— 抓取美女图片
代码如下: #coding:utf-8 # import datetime import requests import os import sys from lxml import etree im ...
- 深入理解JVM - 垃圾收集器与内存分配策略 - 第三章
引用计数算法——判断对象是否存活的算法 很多教科书判断对象是否存活的算法是这样的:给对象添加一个引用计数器,每当一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象 ...