highgear :“到底是整个数组还是单个元素,任由wxj胡说了。” ***************************************************************
好,就按 highgear说的,matr[2][2]不是元素是数组,咱再胡说一次。给你讲讲 matr[2][2]是怎么跑到matr[3][2]之外的。
证明: 如18楼程序char matr[3][2]及back_matr 照写,将matr[2][2]元素修改为char matr[2][2] 数组说明。
char data matr[3][2]={00,01, 0x10,0x11, 0x20,0x21 }; char data back_matr=0x78;
main( void) { char matr[2][2]=0x34; char a=0x55;
while(1); } 程序运行之前,RAM区相关内容连续显示为00 01 10 11 20 21 78 00 00 00 00 00 00。 程序运行之后,RAM区相关内容连续显示为00 01 10 11 20 21 78 34 00 00 00 55 00。
这下更干脆了,整个matr[2][2]数组被创建到了matr[3][2]数组之外!两者风马牛不相及了。 如此简单的3行证明程序算什么法术?如此简单的概念还用专门写一个程序来证明?
C语言 名字的作用域:在两个包容的作用域内(当一个作用域包含另一个时)分别使用了同一名字时,较小的作用域将隐藏于同名外层作用域。(即所谓“挖洞”)。 例如: int i; main( ) { double i ; ...... } double i 局部变量具有分程序作用域,小于全局变量int i的源文件作用域,它使得int i只能在除 main 之外的其他函数中使用。也就是 double i 将 main 从int i 作用域中隐藏(屏蔽)起来了。
例如,如果上面程序在 main 中使用到数组元素 matr[1][1]=0x45; 它将45h写到matr[2][2]数组,而不可能写到matr[3][2]数组。
最有力的辩据:是把所有可能的概念/结果都预先写出证明,让对方无懈可击。
|