- 论坛徽章:
- 0
|
&a[0]+1的值是多少?这个问题可以从c语言的汇编看得出,地址和定义的数据类型有关系:
char a[3]={1,2,3}; 对应的汇编为
mov BYTE PTR _a$[ebp], 1
mov BYTE PTR _a$[ebp+1], 2
mov BYTE PTR _a$[ebp+2], 3
int a[3]={1,2,3};对应的汇编为:
mov DWORD PTR _a$[ebp], 1
mov DWORD PTR _a$[ebp+4], 2
mov DWORD PTR _a$[ebp+8], 3
这个有编译器自动识别,在应用的时候,有各编译器自动进行计算。
且printf("%x, %x, %x\n",&a[0],&a[0]+1,&a[0]+2);语句编译时,自动指定了单元,而不是在使用地址的时候进行计算:
lea eax, DWORD PTR _a$[ebp+8]
push eax
lea ecx, DWORD PTR _a$[ebp+4]
push ecx
lea edx, DWORD PTR _a$[ebp]
push edx
push OFFSET FLAT ?_C@_0BC@NGFL@?$CFx?0?5?5?5?$CFx?0?5?5?5?5?5?$CFx?6?$AA@ ; `string'
call _printf
不知道,是不是这样的? |
|