C语言中函数的形参属于全局变量还是局部变量?

荒原狼的技术博客 2011-09-06 09:45:58
比如函数:
void initial_ds18b20(unsigned char a)
{
......
}
该函数中的形式参数"a"是属于全部变量呢,还是局部变量?
...全文
7331 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
多谢各位高手的指点,现在我明白了!……
northcan 2011-09-07
  • 打赏
  • 举报
回复 2
赋给形参的值是在进行函数调用时被压栈,在函数退出时出栈。
它肯定不是全局变量。

局部变量是指在程序中,只在特定过程或函数中可以访问的变量,是相对于全局变量而言的。全局变量也称外部变量,是在函数外部定义的,作用域为从变量定义处开始,到本程序文件的末尾。全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。

所以楼主将形参认为是局部变量吧。
AnYidan 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kofbee 的回复:]
可是它是形式参数,是不存在的啊,怎么会有这个疑问呢?
英文名字不同:形参是parameter,实参是argument。   本质不同:形参的本质是一个名字,不占用内存空间。实参的本质是一个变量,已经占用内存空间。
[/Quote]

请问 2 楼如何区分 声明变量 和 定义变量


局部变量
lr2131 2011-09-06
  • 打赏
  • 举报
回复
当然是局部变量啊,在进入到这个函数中,编译器会在栈中开辟空间,退出函数后系统移动栈指针就自动回收好了。如果在函数的外面还有unsigned char a的定义,那个是全局变量,在本函数如果不用::a的写法来特制外部的全局变量,一般被编译器默认为本函数内的局部变量。
楼主最好自己写个简答程序试试,要想了解深入点的话,自己写个简单程序,然后看看生成的汇编代码。
hjc12345678hjc 2011-09-06
  • 打赏
  • 举报
回复
局部变量
lbing7 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kofbee 的回复:]

可是它是形式参数,是不存在的啊,怎么会有这个疑问呢?
英文名字不同:形参是parameter,实参是argument。   本质不同:形参的本质是一个名字,不占用内存空间。实参的本质是一个变量,已经占用内存空间。
[/Quote]

补充一下,通常会用寄存器来进行参数传递
haotianmai 2011-09-06
  • 打赏
  • 举报
回复
2楼正解,看汇编就知道了
woshi_ziyu 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kofbee 的回复:]

可是它是形式参数,是不存在的啊,怎么会有这个疑问呢?
英文名字不同:形参是parameter,实参是argument。   本质不同:形参的本质是一个名字,不占用内存空间。实参的本质是一个变量,已经占用内存空间。
[/Quote]
问题确实很奇怪

在调用这个函数的时候才会进行内存分配 不过那时候就不知道是char a还是char b了
xiaohui663099509 2011-09-06
  • 打赏
  • 举报
回复
是局部变量,调用时开辟空间。调用完后,释放开辟的空间。
zm1142415 2011-09-06
  • 打赏
  • 举报
回复
局部变量
bee 2011-09-06
  • 打赏
  • 举报
回复
可是它是形式参数,是不存在的啊,怎么会有这个疑问呢?
英文名字不同:形参是parameter,实参是argument。   本质不同:形参的本质是一个名字,不占用内存空间。实参的本质是一个变量,已经占用内存空间。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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