c语言中双维数组与指针的那点事儿
说起c语言的指针,估计对c语言只是一知半解的同志们可能都会很头疼,尤其它跟数组又无耻的联系到一起的时候,就更加淫荡了!!!
怎么说呢,就是有一点规定:(或准则)
数组名可以看成是指向数组头元素的指针,对,只是能看成。但,数组名,不是指针(不能相互赋值)。不过,可以当指针用。但是,指针不可以当数组名用。
在c语言的始祖书籍《K&R》中,有这么一段声明:只有在作为函数形参的时候
int a[];
int *a; 具有相同的意义。 这个必须要理解。
例如: char str[]="abc";
str[0]='d'; -----可写
char *str="abc";
str[0]='d';-----一般会报错
然后,重点理解下二维数组与指针的关系(注:没有二维数组这么个东西,标准叫法是数组的数组)
代码:
#include<stdio.h>
int main()
{
char* color[]={ "red", "green", "blue" };
]={ "red", "green", "blue" };
printf("%p\n",color);
printf();
printf();
printf("%s\n",*color);
printf(]);
printf(][]);
printf());
printf(]);
printf(]);
printf())[]);//jiu zhe me xiao zhang
printf()+));
printf())[]);
printf("%c\n",**color);
printf("数组的数组\n"); printf("%s\n",*color);
printf());
printf(]);
printf(][]);
printf("字符串\n"); char* str="abc";
printf("%c\n",*str);
printf();
printf());
printf(],]));
;
}
逐个分析:
color是指向第一个数组的头一个元素的指针,也是数组名,第一个数组实际是color[3][5].
那么 *color 就是red 了,color指向red,加个*号,表示解引用,打印真实对象值;
color[0] 很明显,就是第一个元素,也是red;
color[0][0] 第一个元素red的第一个元素 ,即r;
**color 与上一个等价,*color是"red",而字符串又是char的数组,所以,就相当于*color又是char[]数组的指针了,再加一个*,解引用,就成r了;
char[]={'r','e','d','\0'}
同理 *(*color+1) ,就是第二个字母e了;
因为 *color就是"red"嘛,*color就相当于char[]的数组名了呗,那么(*color)[1],也就表示该char[]数组的第二个字母了,即e;
注意,我说的char[]数组就是char[]={'r','e','d','\0'},通篇公用哈~
再来区别一下:
(*color)[1] 输出e,即red里面的e
*color[1] 输出g,即green的g;
因为 *color 整体代表一个数组名
但由于这种表达式是从右向左结合的,所以如果没有(),则首先会生成color[1],即字符串"green",而字符串"green"也可以看成是char[]数组,所以color[1],这时候还有一个角色就是char[]={'g','r','e','e','n','\0'}的数组名了,所以,再加个*,自然输出的就是g了。
同理:
(*(color+1))[4]
*(*(color+1)+4)等价。
再看看colors数组,它的声明中没有出现*号,那么它该怎么与*联系呢?当然,只有一条:数组名可以看成是指向数组第一个元素的指针。
比如: colors[0]
*colors 等价,colors可以看成是指向"red"的指针,加*号解引用。
比如: colors[1][0]
**(colors+1) 等价,其中,*(colors+1)是"green" ,再加*号,表示"green"的第一个元素,即g。
程序运行的截图:

欢迎讨论~~
c语言中双维数组与指针的那点事儿的更多相关文章
- c语言中多维数组和指针的关系
如图: 执行结果: 说明:由执行结果可知,三个输出的结果相等(可能在不同的平台执行结果不相同,但三个的结果是相等的),数组multi的地址与数组multi[0]的地址相同,都等于存储的第一个整数的地址 ...
- C语言教学--二维数组和指针的理解
对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...
- C语言--指向多维数组的指针和指针数组
#include <stdio.h> //void show(char *p[]); ]); int main(){ ][]={","abc","x ...
- C语言之二维数组与指针
二维数组: ][]; 二维数组实质上也就是一维数组,a[2][3]可看做一个2个元素的一维数组,这2个元素又是另一个数组,在内存中,它的排布如下: #include "stdio.h&quo ...
- 关于c语言二维数组与指针的个人理解及处理办法。
相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...
- C语言多维数组的指针传递
在C语言中为了节省空间,提高运行速度经常使用指针来完成数组的传递. 对于一维数组而言可以直接传递首地址 而对于二维数组必须在传递时声明是二维数组的指针,并且调用时也要经过一些运算 首先是定义形参: 函 ...
- C语言 二维数组(指针)动态分配和释放(转)
C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...
- 二维数组和指针(C语言)
二维数组和指针 二维数组和指针1.二维数组和数组元素的地址若有以下定义:int *p, a[3][4]; 1)二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的 ...
- c语言编程-----指向二维数组的指针
c中如何返回一个指向二维数组的指针 #include <stdio.h> #include <stdlib.h> #define COUNT 3 typedef int (*M ...
随机推荐
- HDU 5758 Explorer Bo(树形DP)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5758 [题目大意] 给出一棵树,每条路长度为1,允许从一个节点传送到任意一个节点,现在要求在传送次 ...
- Oracle 11g 的server结果缓存result_cache_mode
对于常常要查的结果集,返回少量记录,server端是能够缓存的,结果集保存在共享池中,假设是绑定变量,绑定变量的值也要一样. SQL> show parameter result_cache N ...
- xcode 不值钱的动画UIImageView
了解 animateWithDuration方法 制作动画变得不值钱 代码创建一个UIImageView 后加入self.view 容器中 调用点击屏幕touchesBegan 方法执行动画 #imp ...
- js页面loading加载
<html> <head> <title>页面正在载入</title> <script language=" ...
- HTTPS 加密算法原理机制解析
当你在浏览器的地址栏上输入https开头的网址后,浏览器和服务器之间会在接下来的几百毫秒内进行大量的通信.InfoQ的这篇文章对此有非常详细的描述.这些复杂的步骤的第一步,就是浏览器与服务器之间协商一 ...
- IEEE 754标准
IEEE 754-1985 was an industry standard for representing floating-point numbers in computers, officia ...
- ubuntu 16.04环境配置
ubuntu 16:1.源cp /etc/apt/sources.list /etc/apt/sources.list.bkpvi /etc/apt/sources.list-+{ deb ht ...
- c++ primer plus 习题答案(7)
p427.4 //头文件: #include<iostream> #ifndef STACK_H_ #define STACK_H_ typedef unsigned long Item; ...
- String VS Cstring(字符串)
#include<string> 与 #include<string.h> 这是两个完全不同的头文件,前者用于C++,后者用于C,一般把这两个头文件都包括进去. 越来越觉得需要 ...
- POJ2823 Sliding Window(单调队列)
单调队列,我用deque维护.这道题不难写,我第二次写单调队列,1次AC. -------------------------------------------------------------- ...