判断题
1数组名就是一个指针常量,指向数组的首元素(或者说代表了数组的首地址)。 T F
分析:见https://www.cnblogs.com/zhangzihan/p/6358365.html,关于此问题的讨论
https://blog.csdn.net/jiftlixu/article/details/4861058关于数组名是一个指针常量的讨论,即可知数组名不是指针常量(首先,在C/C++中,数组类型跟指针类型是两种不同的派生类型,数组名跟指针是两种不同类型的实体,把数组类型的实体说成“是”另一个类型的实体,本身就是荒谬的;其次,a + 1在效果上之所以等同于p + 1,是因为a进行了数组到指针的隐式转换,这是一个转换的过程,是converted to而不是is a的过程。如果是两个相同的事物,又怎会有转换的过程呢?当把a放在a + 1表达式中时,a已经从一个数组名转换为一个指针,a是作为指针而不是数组名参与运算的;第三,a + 1与p + 1是等效关系,不是等价关系。等价是相同事物的不同表现形式,而等效是不同事物的相同效果。把数组名说成是指针实际上把等效关系误解为等价关系。因此,数组名不是指针,永远也不是,但在一定条件下,数组名可以转换为指针。)
5一维数组定义的一般形式如下,其中的类型名指定数组变量的类型。
类型名 数组名[数组长度];
T F
分析:类型名指明了数组中元素属于那种数据类型
凡是函数中未指定存储类别的局部变量,其隐含的存储类型是( )。
A.auto
B.static
C.regiser
D.extern
[解析] 变量说明时使用auto修饰的局部变量是自动变量,auto经常省略,在未指定存储类别时,默认为auto。
假定int类型变量占用两个字节,有定义:int x[10]={0, 2, 4}; 则数组x在内存中所占字节数是( )。
3
6
10
20
——————
20个,int x[10],已经确定了x的大小是10个,所以存储单元(byte, 1 int = 2 byte, 16位系统上)就是确定的了。 {0, 2, 4},只是把前3个存储单元进行了初始化而已。
下面程序的功能是:依次输出[0,100]范围内是3的倍数的整数,请填空。
#include <stdio.h>
int main() {
int i;
for(i=0; i<=100; i++) {
if(i%3==0) //判断i是否为3的倍数
printf("%d\n", i);
}
return 0;
}
“在因数和倍数的研究过程中,不包括0。因为倍数是一种专用名词,它是在自然数的范围内。即被除数、除数、和商必须都是自然数。如果0是3的倍数,同理0也是其他自然数的倍数,它便是任何自然数的公倍数,且是最小的。这给求几个数的最小公倍数设置了障碍,因此,不能说0是3的倍数。”但是可以用0%一个数还是等于0,要保证0这种情况,但是不能用0/一个数要注意0不能作为除数。
单选题
62-11以下哪个定义中的p
不是指针,请选择恰当的选项: (2分)
char **p;
char (*p)[10];
-
char *p[6];
- 给出的三项中,
p
都是指针
分析:详情见https://zhidao.baidu.com/question/428801336.html分析
char *p[] 是数组,元素类型为字符指针。作变量定义时需要有元素数量,或者有初始化表达式以确定元素数量。
char **p 是指针,其指向的一个字符指针。通常用于遍历像上面这样的数组。
char (*p)[] 是指针,其指向的是名义上的数组(因为没有具体数组元素数目)。
7分析:A(列不能空)BC数组初始化格式错误,D数组越界无a[3][4]这个元素,所以选择E
多选题(少选算部分对,基于自己的答案对少选和部分对做出分析)