前言
关于生命周期&作用域一些选择题讲解
题目一:
下面代码输出的结果是:( )
A . 程序有问题,不能编译
B .输出1
C .输出10
D .输出0
cpp
#include <stdio.h>
int num = 10;
int main()
{
int num = 1;
printf("num = %d\n", num);
return 0;
}
选择B。
讲解:C语言中,当全局变量与局部变量同名时,优先选择局部变量,因此优先打印局部变量的值。
题目二:
局部变量的作用域是:()
A .main函数内部
B .整个程序
C .main函数之前
D .局部变量所在的局部范围
选择D。讲解:c语言中局部变量的作用域是局部变量所在的局部范围,全局变量的作用域是整个工程。
题目三:
字符串的结束标志是:( )
A .是'0'
B .是EOF
C . 是'\0'
D .是空格
选择C。讲解:c语言中字符串的结束标志为:'\0',在字符串末尾,往往隐藏着一个'\0',不算作实际内容。但需要注意:char arr[] = "abcd" 这种情况,该字符串的个数为5,当字符数组未指定大小时,'\0'也算作该数组的个数,注意区分。
题目四:
下面代码的结果是:( )
A .3
B .4
C .随机值
D .5
cpp
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = {'b', 'i', 't'};
printf("%d\n", strlen(arr));
return 0;
}
选择C。
讲解:strlen计算字符串长度函数,以'\0'为结束标志,统计'\0'之前的字符个数,题目中char arr[] = {'b', 'i', 't'} 是一种以单个字符数组组成的字符串,与char arr[] ="ait" 不一样,第一种形式末尾没有隐藏着'\0',而第二种末尾默认会隐藏'\0',估strlen函数会一直寻找'\0',但找不到,会返回一个随机数.
题目五:
下面那个不是转义字符?()
A .'\n'
B .'\060'
C .'\q'
D .'\b'
选择C。讲解:A选项是换行转义字符; B选项表示八进制的转移字符; D选项表示退格转移字符;
唯独C选项,并不是一个转义字符
题目六:
下面程序的结果是:( )
A .7
B .8
C .9
D .10
cpp
#include <stdio.h>
#include <string.h>
int main()
{
printf("%d\n", strlen("c:\test\121"));
return 0;
}
选择A。
讲解:strlen("c:\test\121") 计算该字符串长度,以'\0'为结束标志,字符串中\t和\121为转移字符,因此算作一个字符,估该字符串长度为7.