函数局部变量老问题

h248080441 2011-03-27 11:04:22

void foo(int [][3] );
main()
{
int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}};
foo(a);
printf("%d" , a[1][1]);
}

void foo( int b[][3])
{
b[1][1] =9;
}

函数内的变量不是局部变量吗,函数结束后销毁,为什么这里输出会等于9?
老是混淆
...全文
89 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovesi3344 2011-03-27
  • 打赏
  • 举报
回复
数组名本身就是指针。
x-teamer团队 2011-03-27
  • 打赏
  • 举报
回复
如楼上所言,数组是当指针传递的。

作为比较,你可以试试传参为一个普通的INT类型的变量.

这个跟你预期的结论是一致的。
lwtbn1 2011-03-27
  • 打赏
  • 举报
回复
main函数里的foo(a);其中a是指针常量!
h248080441 2011-03-27
  • 打赏
  • 举报
回复
void foo( int b[][3])
传数组就是传地址是这样吗
void foo( int b) 传值
yuhang315305547 2011-03-27
  • 打赏
  • 举报
回复
函数的参数传递分为值传递和地址传递两种。值传递是单向传递,不会改变原来变量的值。但是地址传递后,函数中的变量和主函数中的数组指向同一内存空间,只要函数中变量的值改变,主函数中数组相应的值也会改变。你那的属于地址传递。
媒体盒子 2011-03-27
  • 打赏
  • 举报
回复
你这个函数传进去的是一个二维数组的首地址(COPY一份传进去的,完了是要销毁),但是该地址([1][1])的内容已经发生了改变,所以跟销毁不销毁没关系.传进去的如果是值就另当别论了.但是值有时候也可能是地址值啊!所以之间关系好好体会吧!
muku9527 2011-03-27
  • 打赏
  • 举报
回复
1 楼正解
pengzhixi 2011-03-27
  • 打赏
  • 举报
回复
这个属于传参问题,而非局部变量的问题。
你传递指针过去,然后修改了指针所指内存里面的值而已。

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧