这段C代码的运行结果为什么是这样的?

[复制链接]
查看11 | 回复5 | 2013-7-15 18:24:52 | 显示全部楼层 |阅读模式
先上反汇编,否则很麻烦:[FORMAT "WCOFF"][INSTRSET "i486p"][OPTIMIZE 1][OPTION 1][BITS 32] EXTERN _printf EXTERN _putchar EXTERN ___main EXTERN __alloca[FILE "main.c"] GLOBAL _ga[SECTION .data]_ga: DB "abc",0x00LC0: DB "&ca=%d",0x00[SECTION .text] ALIGN 2 GLOBAL _func1_func1: PUSH EBP MOV EBP,ESP SUB ESP,8 SUB ESP,8 LEA EAX,DWORD [8+EBP] PU...
回复

使用道具 举报

千问 | 2013-7-15 18:24:52 | 显示全部楼层
因为用的是debug模式而已,入栈出栈后正好一致而已,换一个编译模式就不一样了,release模式下值就会不一样了或者更简单的做法,在func2里调用func1#include char ga[4]="abc";void func1( char ca[]){
printf("&ca=%d",&ca); ...
回复

使用道具 举报

千问 | 2013-7-15 18:24:52 | 显示全部楼层
func1(ga);
func2(ga);你调用时传入的都是ga所以输出一样!...
回复

使用道具 举报

千问 | 2013-7-15 18:24:52 | 显示全部楼层
他们都指向同一个地方,ga的地址,输出的也就是ga的地址。...
回复

使用道具 举报

千问 | 2013-7-15 18:24:52 | 显示全部楼层
char ga[4]="abc";定义的是数组对象当你当做参数传递到其他方法中 其实传的是该对象的首地址...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行