首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

很有意思的一个c程序解决方法

2012-06-09 
很有意思的一个c程序#include stdio.hfun1(char ca[])fun2(char *pa)char ga[4]{a,b,c,d}ma

很有意思的一个c程序
#include "stdio.h"
fun1(char ca[]);
fun2(char *pa);
char ga[4]={'a','b','c','d'};
main()
{
fun1(ga);
  fun2(ga);

printf("%p %p %p\n",&ga,&(ga[0]),&(ga[1]));
}
fun1(char ca[])
{
printf("%p %p %p\n",&ca,&(ca[0]),&(ca[1]));
}
fun2(char *pa)
{
printf("%p %p %p\n",&pa,&(pa[0]),&(pa[1]));
}
先猜一下结果,再编译运行一下。

[解决办法]
ca是一个局部变量,&ca是局部变量的地址,pa也一样
两个变量都指向ga
#include "stdio.h"
fun1(char ca[]);
fun2(char *pa);
char ga[4]={'a','b','c','d'};
main()
{
fun1(ga);
fun2(ga);

printf("%p %p %p\n",ga,&(ga[0]),&(ga[1]));
}
fun1(char ca[])
{
printf("%p %p %p\n",ca,&(ca[0]),&(ca[1]));
}
fun2(char *pa)
{
printf("%p %p %p\n",pa,&(pa[0]),&(pa[1]));
}


看上面我改后的代码就对了,改后的输出为:
0x601020 0x601020 0x601021
0x601020 0x601020 0x601021
0x601020 0x601020 0x601021
不明白为什么的话多查查资料
[解决办法]
ca,pa都是两个局部变量,局部变量是分配在栈上的,main调用func1,在栈上分配局部变量ca,执行完func1,清空栈,然后调用func2,在栈上分配局部变量pa,执行func2,所以&ca和&pa是相等的。

热点排行