【转】C++ 数组和指针
一道华为的面试题,mark下~ 原链接:http://www.programfan.com/club/showpost.asp?id=29498
------------------------------------------
题目:
文件1里声明全局变量:int array[5];
文件2里声明全局变量:extern int *array;
问在运行时会不会报错,如果会,是在编译时还是在链接时?
解答:
//extern int array[5]; a[4]=123;
movl $123, array+16
声明成 数组时, array是个地址,array[i]实际上就是array+i
//extern int *array; a[4]=123
movl array, %eax
addl $16, %eax
movl $123, (%eax)
声明成指针时,需要对指针进行解引用
就是 先把指针里存放的值+偏移 然后解引用
C语言语法给人的感觉是 数组跟指针几乎一样 但是内部实现是完全不同的
上面的情况跟下面的是有区别的
int a[10];
int *p=a;
p本身的地址跟a不同,p中存储的是a的值
p[5] == (p中存储的值 + 5*sizeof(int)) 这个地址中存储的值 p中存储的值是a的值
而int a[10];
extern int *a;
此处a的地址和a相等,是同一个数值
a[5]== (a中存储的值+5*sizeof(int))这个地址存储的值 第二个a中存储的值 就是a[0]的值

浙公网安备 33010602011771号