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

原创 2015年11月21日 19:53:10

局部变量是在程序运行时分配的他存在栈区,有些书中讲局部变量的作用域是在函数中,在函数调用时全部入栈,其实这种理解只在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内核中常被用于宏的定义中。



C/C++函数返回局部变量相关问题

C/C++函数返回局部变量相关问题 函数返回局部变量的时候会遇到各种各样的情况,涉及到内存相关的东西时一定要小心是否会出错。 1、常见栈内变量 一般来说,在函数内对于存在栈上的局...

关于C/C++: 在函数外存取局部变量问题( 精辟 )

今天上网看到一个很好玩的也很有深度的C++问题,代码是这样的:          #include int * fun() {     int a =5;     return (...

C/C++函数返回局部变量相关问题

函数返回局部变量的时候会遇到各种各样的情况,涉及到内存相关的东西时一定要小心是否会出错。 1、常见栈内变量 一般来说,在函数内对于存在栈上的局部变量的作用域只在函数内部,在函数返回后,局部...
  • fakine
  • fakine
  • 2016年05月05日 10:07
  • 286

C陷阱篇之复合表达式中的确定与不确定

操作数求值顺序不定    C只规定小部分运算符以已知、特定顺序对其操作数求值,其他运算符的求值顺序没有定义,有偶然性。如a ,C标准规定:先求a,如a成立,再求c并计算整个表达式的值。任何编译器都不...
  • ipmux
  • ipmux
  • 2013年12月16日 15:45
  • 699

例解GNU C之表达式中的复合语句

前言:计算机语言是编译器和程序员交流的依据和规范,GNU C是GCC特有的功能,在Linux内核中被广泛应用。     帮助文档:http://gcc.gnu.org/onlinedocs/gcc-...
  • npy_lp
  • npy_lp
  • 2011年11月27日 14:52
  • 2835

C语法归约之表达式复合运算(4)

上篇文字是基本表达式归约过程示例,本篇将来点高级复杂的玩玩!这部分示例代码源自kernel的20个源程序文件,挑选运算符组合复杂和比较典型的表达式!因此只能用来归约示例,不是可运行代码!挑你有兴趣的运...

关于C/C++中表达式求值顺序的深层次问题

裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?” m = 1; n = m+++m++; 最近有位不相识的朋友发ema...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c 中局部变量问题和复合表达式问题
举报原因:
原因补充:

(最多只允许输入30个字)