c 中局部变量问题和复合表达式问题

局部变量是在程序运行时分配的他存在栈区,有些书中讲局部变量的作用域是在函数中,在函数调用时全部入栈,其实这种理解只在c89的标准下是对的,在c99中局部变量是可以在函数的任何地方声明的,他的左右域也可是复合语句 , 下面我们就来了解一下,复合语句和局部变量问题。


1. 函数中定义的变量他的作用域只在该函数内。

2. 函数的形参属于被调函数的局部变量,而实参则是主调函数的局部变量。

3. 允许在不同的函数中使用相同的变量名,他们之间互不干扰。

4. 在复合语句中可以定义变量(该变量名可以和其他复合语句相同,他们互不干扰)他的作用域只在复合语句内。

 例如:

       int getTheName(int num)

      {

            int i=0,n=30;

             for(i=0;i<n;i++)

            {

 int i = 3;                            //这里的i是合法的

                 if(i==num)

                      return i;

            }

          return 0;

      }

既然提到了在复合语句中就可以定义变量,那么什么是复合语句呢。

复合语句就是{ } 括起来,他由若干个表达语句组合成的,复合语句只是表明程序的作用域而已,在c中允许小括号扣起来的语句出现在一个表达式中,因此一个变量可以赋值一个复合语句例如 int a=({ int i=0; char b; if(b=='a') { i = 3}}) 这个表达语句的值就是复合语句最后一个表达式的值,注意最后一个表达式的类型一定要和变量相同。再举个例子:                                               


再次注意,例子中a的值是复合语句中最后一个语句的值,并且要用()括起来,并且它的数据类型与最后一个语句的数据类型相匹配,这里除了宏定义, 如果时出现在赋值表达式中最后一个表达式一定是一个不同表达式而不能使(循环,条件,switch 语句,这样c99无法编译通过)

这种特性 在Linux内核中常被用于宏的定义中。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值