关于C语言的二维数组
在C语言中,&为取地址操作符,*为取值操作符
假设a为一个二维数组,为什么a[i]等于&a[i]等于*(a+i)呢
大神能给解释一下吗?
[解决办法]
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?
不要写连自己也预测不了结果的代码!
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
[解决办法]
只是地址值是一样的,但是a[i]与&a[i]的类型就不一样了,a[i]是一重指针,&a[i]是二重指针,a[i]和*(a+i)是一样的地址值和类型都是一样的,知识写法不同而已。
[解决办法]
二维数组a[3][3],要理解一堆数组的概念。其实是一个一维数组,每一个成员又有3个元素。
其实根本就不存在二维数组,从内存的角度来说都是一维的,如
1 2 3
4 5 6
7 8 9
也就是由三个一维数组组成,分别是a[0] = { 1,2,3},a[1] = {4,5,6},a[2] = {7,8,9}