1、若有定义:int a[5];则a数组中首元素的地址可以表示为a,a[0],*(a+0),*a,&a[0]。
2、若有定义:int(*p)[4],则p是一个指向含有四个整型元素的一维数组的指针。
3、若有语句int *point,a=4;和point=&a;下面均代表地址的是&a,&*point,point。
a是变量,point是指针,*point是值不是地址,&a是变量a的地址,&*a是变量a这个地址的内容,*&point和&*point一样的是地址。
4、若有说明:int *p,m=5,n;以下正确的程序段是
A、p=&n; scanf(“%d”,&p);
B、p=&n; scanf(“%d”,*p);
C、scanf(“%d”,&n); *p=n;
D、 p=&n; *p=m;
A p=&n;scanf("%d",&p); 这时候p指向的内容就是n的地址,但是scanf调用的&p,它是往这个指针自己的地址里面写,实际上我们希望 往指针指向的内容里面写,所以不合理.
B p=&n;scanf("%d",*p); p指向的内容为n的地址,*P的内容就是n这个地址里面存储的东西,我们想要赋值的是n,所以不合理.
C scanf("%d",&n);*p=n; 未对指针初始化,不合理.
5、对于基类型相同的两个指针变量之间,不能进行的运算是 +
“<” 可以比较两个指针所指向的地址大小
“-” 可以计算两个指针所指地址之间相隔多少个这种基类型的空间
"=" 赋值
"+" 没有意义
6、逗号表达式"(a=3*5,a*4),a+15"的值为啥是30而不是15?
运算符优先级:括号运算>乘法>赋值>逗号,清楚了运算顺序之后便可求出这个表达式的值了。
其次需要知道逗号表达式的值,为最后一个子表达式的值,如:3,5的表达式值为5。赋值表达式的值为赋值后的值,如:a=5的表达式值为5。
- 计算括号:括号内的表达式分别为两个乘法运算,一个赋值运算,一个逗号运算,那么按照上面的顺序运算,就有表达式就可写为,(a=15,a*4), a+15
- 计算赋值及括号内的逗号表达式:赋值优先级更高,先执行,则a的值被更新为15,计算a*4值为60,括号内的表达式变为(15,60),但是执行a*4后,a的值并未被更新仍为15!!!最终表达式结果变为60,a+15,此时a的值为15。
- 计算第2步的表达式,先执行加法运算,得到最终表达式60,30,最后计算逗号表达式,则最终的值为30。
7、字符串常量表达“123”
8、若有说明:int a[3][4];则对a 数组元素的正确引用是 ()
A a[2][4]
B a[1][3]
C a[1+1][0]
D a(2)(1)
A、a[2][4]是错的,原因是第一维越界,不存在a[]。
D、a(2)(1)是错的,只有函数、强制类型转换、算式才使用圆括号。
对于a[3][4]说明有12元素,行从0到2,列从0到3,a[0][4]的列超界。
数组说明的一般形式为:类型说明符数组名 [常量表达式],其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
9、c语言中关于函数说法正确的是:
A、在很多情况下,主函数main都使用无参形式,实际上主函数也可以带参数
B、函数的定义和函数的调用均可以嵌套
C、函数的定义必须在前才可以调用
D、函数的定义和函数的调用均不可以嵌套
解析:C语言函数的定义不能嵌套,函数的调用可以嵌套
c选项是一般情况下先定义后调用
10、在函数调用过程中,如果函数funA调用了函数本身,则( )。
- A.C语言中不允许这样的调用
- B.称为函数的循环调用
- C.称为函数的直接递归调用
- D.称为函数的间接递归调用
11、若变量c为char类型,能正确判定c为大写字母的表达式是( )。
- A.(c>='A')||(c<='Z')
- B.(c>='A')&&(c<='Z')
- C.'A'<=c<='Z'
- D.('A'<=c) and ('Z'>=c)
一元:! (逻辑非)。 二元:&&(逻辑与)、||(逻辑或)。
12、若有以下说明语句:
struct date
{ int year;
int month;
int day;
}brithday;
则下面的叙述不正确的是_____。
- A.struct是声明结构体类型时用的关键字
- B.year,day 都是结构体成员名
- C.struct date 是用户定义的结构体类型名
- D.brithday是用户定义的结构体类型名
struct是结构体类型的关键字
struct date是用户定义的结构体类型
brithday是结构体变量
结构的定义
定义一个结构的一般形式为:
struct 结构名
{
成员表列
}
成员表由若干个成员组成,每个成员都是该结构的一个组成部分。
对每个成员也必须作类型说明。
结构类型变量的说明
结构体定义并不是定义一个变量,而是定义了一种数据类型,这种类型是你定义的,它可以和语言本身所自有的简单数据类型一样使用(如 int )。
结构体本身并不会被作为数据而开辟内存,真正作为数据而在内存中存储的是这种结构体所定义的变量。
13、若有以下语句,则正确表示数组元素地址的语句是( )。
int a[ ]={2,3,1,3,4};
int n=2;
- A.&(a+n)
- B.*(a+n)
- C.a+n
- D.++a
a是1的地址,a+1是2的地址,&(a+1)是2的地址的地址。题目问的是数组a的元素的地址,而&(a+1)显然是数组a的元素的地址的地址,那你的感觉怎么会对呢?要是只写a+1就对了!&p[i]中由于已有p=a;语句在先,所以&p[i]就是&a[i],a[i]是a数组第i个元素(或称元素值),&a[i]自然是a数组第i个元素的地址,符合题意。
14、一个函数中定义的局部变量和静态局部变量其作用域是相同的。(对)
15、在循环结构中,continue语句可以中止当前循环,执行下一次循环。(对)
16、C语言标识符由字母、数字和下划线组成,其中第一个字符可以是字母或数字。(错)
17、在函数定义时,可以不指定形参的数据类型,函数调用时实参的数据类型决定了形参的类型。(错)
18、二维数组名是一个行指针。(对)
19、case语句后,有没有break,程序执行的结果没有不同(错)