C错题
1
1 |
|
输出等于1
根据C99规范, sizeof是一个编译时刻就起效果的运算符,在其内的任何运算都没有意义,sizeof(i++); 在编译的时候被翻译成 sizeof((i++的数据类型)) 也就是 sizeof(int); 不会执行i++了 。
sizeof是操作符
2
下面说法中正确的是()
若全局变量仅在单个C 文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度
1
2
3
- ```
若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度```
设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑变量生命周期问题1
2
3
- ```
静态全局变量使用过多,可那会导致动态存储区(堆栈)溢出
Static 函数在非类中有三个作用:
1、用来隐藏,利用这一特性,可以在不同的文件中定义同名变量和同名函数,而不用担心命名冲突,对应A选项;
2、默认初始化为0;
3、保持局部变量的持久 。所以A选项是对的。B选项毫无关系,C选项中动态全局变量、静态全局变量、静态局部变量生命期都为函数运行期间。 其中静态局部变量的生存周期虽然为整个源程序,但是其作用域任然与局部变量相同,当退出该函数时,该变量还继续存在,但是不能使用它。所以C选项是错的。 D选项中,静态全局变量存储在全局(静态)存储区。
3
1 | `int` `a = ``248``, b = ``4``;``int` `const` `c = ``21``;``const` `int` `*d = &a; ``int` `*``const` `e = &b;``int` `const` `* ``const` `f = &a; ` |
请问下列表达式哪些会被编译器禁止?
*c=32
1
2
3
- ```
*d=43e=&a
1
2
3
- ```
f=0x321f```
d=&b1
2
3
- ```
*e=34
4
假设函数原型和变量说明如下:
1 | void f3(int(*p)[4]); |
下面调用非法的是(b)
f3(&a);
f3(b[1]);
f3(&b[1]);
f3(b);
void f3(int(*p)[4]); 其参数是数组指针 ,指向数组p的指针。
- 选项A:f3(&a); 参数为一个地址,符合指针定义。
- 选项B:f3(b[1]); 参数为一个数组的具体元素,不符合指针定义。所以B是非法的调用。
- 选项C:f3(&b[1]); 参数为一个数组元素的地址,符合指针定义。
- 选项D:f3(b); 参数为数组名,表示该数组的首地址,符合指针定义。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 涵风 Blog!