12个有趣的C语言问答(详解)(3)

1 #include <stdio.h>
 2 int* inc(int val)
 3 {
 4    int a = val;
 5    a++;
 6    return &a;
 7 }
 8
 9 int main(void)
10 {
11    int a = 10;
12    int *val = inc(a);
13    printf("\n Increamented value is equal to [%d] \n", *val);
14
15    return 0;
16 }

A:虽然上面的代码有时运行会很好,但是在方法 inc() 中有很严重的隐患,因为它返回了局部变量的地址。��inc()方法执行后,再次使用局部变量的地址就会造成不可估量的结果。解决之道就是传递变量a的地址给main()。PS:我觉得最后一句的说法有问题。

12 处理printf()参数

Q:请问以下代码的输出是什么?

#include<stdio.h>
 
int  main( void )
{
    int  a = 10, b = 20, c = 30;
   
    printf ("\n %d..%d..%d \n", a+b+c, (b = b*2), (c = c*2));
    return  0; 
}

A:程序的输出如下:

110..40..60

这是因为参数都是从右向左处理的,然后打印出来却是从左向右。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ade0bac6d6ef972df1527c03a0df1632.html