【1224】数据结构(sizeof/数组的长度定义/读取字符串函数/线性表长度/左值右值/静态变量/指针与引用)
1.对一维整型数组a的正确说明是 #define SIZE 10 (换行) int a[SIZE];说法是否正确?
正确
数组的SIZE可以用宏定义,但不能用变量
2.如有定义:char str[20];,能将从键盘输入的字符串“How are you”保存到 str 数组的语句是( )
A scanf("%s", str);
B str[] = getch();
C gets(str);
D str = gets();
C gets(str);
A选项:scanf()函数里输入空格,会被系统当作输入字符串之间的分隔符,认为当前字符串已经结束。所以str[20]中实际存储的是"How"。
B选项:getch(),一次只能读取一个字符。
C选项:gets(str);可以读取字符串,以回车键作为结束标志。
D选项:gets()函数用错了
2.线性表的长度是线性表所占用的存储空间的大小。
错
线性表长度的定义是它所包含的元素的个数
元素的类型决定了元素所占用存储空间的大小,但元素的个数不等价于元素的类型
3.如下代码所示,分别用于统计字符串的长度(在32位系统里),那么输出的结果分别为()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
输出为 25,4
sizeof统计的是字符串s占用空间的大小(且包括结束符'\0'),因此第一次输出的大小为25,当字符串s是通过参数传递到函数testArgs时,则函数会由指针s来指向传递的字符串这一片内存,因此第二次sizeof的时候,是对指向该字符串的指针变量长度的统计。
由于不同类型的指针变量长度都是一样的(不同机器可能存在差异),都是4字节长度。
4.int a=4,则对于表达式++(a++)的结果是什么()
没有结果,程序出错
a++后a=4
自增运算必须针对变量 而a++返回4 最后相当于++4 所以错误
a++是右值,不能再进行左值运算
5.以下程序能对两个整型变量的值进行交换。以下正确的说法是( )
|
A 该程序完全正确
B 该程序有错,只要将语句swap(&a, &b);中参数改为a,b即可
C 该程序有错,只要将swap()函数中的参数p、q及t均定义为指针变量即可
D 以上说法都不正确
D 以上说法都不正确
第一种:使用引用 void swap(int &p,int &q){ int t; t=p;p=q;q=t; } 调用swap(a,b)
第二种:使用指针 void swap(int *p,int *q){ int t; t=*p;*p=*q;*q=t; } 调用swap(&a,&b)
注意如果直接传递ab,函数里面的交换并不会影响函数外面的传参
6.在C语言中,关于静态变量的说法,不正确的有()
A 函数中的静态变量,在函数退出后不被释放
B 静态变量只可以赋值一次,赋值后则不能改变
C 静态全局变量的作用域为一个程序的所有源文件
D 静态全局变量过大,可能会导致堆栈溢出
BCD
B选项:静态全局变量可以重复赋值
C选项:静态全局变量作用域为当前文件,普通全局变量 作用域是整个程序
D选项:静态全局变量不是存在堆栈里的,所以不存在堆栈溢出,已经初始化的存在数据段中,没有初始化的静态全局变量,存在BSS中