大一上c语言基础知识题

C语言指针与数组详解
本文详细介绍了C语言中的指针与数组概念,包括指针的基本操作、数组元素的引用方式、指针与数组的关系等内容,并通过实例解析了常见问题。

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。

  1. 计算括号:括号内的表达式分别为两个乘法运算,一个赋值运算,一个逗号运算,那么按照上面的顺序运算,就有表达式就可写为,(a=15,a*4), a+15
  2. 计算赋值及括号内的逗号表达式:赋值优先级更高,先执行,则a的值被更新为15,计算a*4值为60,括号内的表达式变为(15,60),但是执行a*4后,a的值并未被更新仍为15!!!最终表达式结果变为60,a+15,此时a的值为15。
  3. 计算第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,程序执行的结果没有不同(错)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛小一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值