C语言期末考填坑

期末:三、编程题3道,二、程序填空2道,一、读程序写结果5道。题量略大。planet,inventory的例子必须搞懂,有类似的写程序题目。

二维数组、字符串数组、结构数组、指针操作数组、函数传址递归调用都是考察重点。

13章的planet程序,16章的inventory程序必须搞懂、会编写,考试肯定会有类似题目。想过必须搞懂。

C语言优先级

 

优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[]
数组下标
数组名[整型表达式]
左到右
 
()
圆括号
(表达式)/函数名(形参表)
 
.
成员选择(对象)
对象.成员名
 
->
成员选择(指针)
对象指针->成员名
 
2
负号运算符
-算术类型表达式
右到左
单目运算符
(type)
强制类型转换
(纯量数据类型)纯量表达式
 
++
自增运算符
++纯量类型可修改左值表达式
单目运算符
自减运算符
–纯量类型可修改左值表达式
单目运算符
*
取值运算符
*指针类型表达式
单目运算符
&
取地址运算符
&表达式
单目运算符
!
逻辑非运算符
!纯量类型表达式
单目运算符
~
按位取反运算符
~整型表达式
单目运算符
sizeof
长度运算符
sizeof 表达式
sizeof(类型)
 
3
/
表达式/表达式
左到右
双目运算符
*
表达式*表达式
双目运算符
%
余数(取模)
整型表达式%整型表达式
双目运算符
4
+
表达式+表达式
左到右
双目运算符
表达式-表达式
双目运算符
5
<<
左移
整型表达式<<整型表达式
左到右
双目运算符
>>
右移
整型表达式>>整型表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式<表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!=
不等于
表达式!= 表达式
双目运算符
8
&
按位与
整型表达式&整型表达式
左到右
双目运算符
9
^
按位异或
整型表达式^整型表达式
左到右
双目运算符
10
|
按位或
整型表达式|整型表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?:
条件运算符
表达式1? 表达式2: 表达式3
右到左
三目运算符
14
=
赋值运算符
可修改左值表达式=表达式
右到左
 
/=
除后赋值
可修改左值表达式/=表达式
 
*=
乘后赋值
可修改左值表达式*=表达式
 
%=
取模后赋值
可修改左值表达式%=表达式
 
+=
加后赋值
可修改左值表达式+=表达式
 
-=
减后赋值
可修改左值表达式-=表达式
 
<<=
左移后赋值
可修改左值表达式<<=表达式
 
>>=
右移后赋值
可修改左值表达式>>=表达式
 
&=
按位与后赋值
可修改左值表达式&=表达式
 
^=
按位异或后赋值
可修改左值表达式^=表达式
 
|=
按位或后赋值
可修改左值表达式|=表达式
 
15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺序结合

 


1、

int *p[N]表示指针数组,也就是说定义了N个不同指向int型的指针。

int (*p)[N]表示定义一个指针,指向一个int[N]型的指针。

int **p 表示定义一个指向指针的指针。

[]的优先级要高于*


2、c语言逻辑短路规则:
练习题

i=1;j=1;k=1;

printf(“%d”,++i||++j&&++k);

printf(“%d %d %d”,i,j,k);

结果为2,1,1

原因短路规则 高于 运算符优先级规则,目的是为了节省计算资源

expr1 && expr2 若expr1的值为假,则不会计算expr2;

expr1 || expr2  若expr1的值为真,则不会计算expr2;


3、关于sizeof()与strlen()

首先sizeof()是运算符,而strlen()是函数;

strlen(ptr)的执行机理是:从参数ptr所指向的内存开始向下计数,直到内存中的内容是全0(即’\0’)为止(不会对’\0’进行计数)

sizeof(name)的执行机理是:如果name是一个类型名,得到的是该类型的大小(所谓类型的大小,指的是:如果存在一个该类型的变量,这个变量在内存中所占用的字节数),如果name是一个变量名,那么,sizeof(name)并不会真正访问该变量,而是先获知该变量的类型,然后再返回该类型的大小

本质上,sizeof的运算对象是类型


关于整形溢出

  • 溢出表现跟操作数有无符号有关

符号溢出

  • 程序行为没有定义的(不确定的)。

无符号溢出时,掐头取尾

  • 结果为正确结果模(余)除2n的结果,
  • n:存储运算结果的位数

关于指针与数组


1、C语言中数组名就是数组的首地址

2、可以对指向数组的指针进行取下标操作

指针的 * 和 ++组合:(++的优先级高于*)

*p++  先取*p,然后自增p; (比较方便)

(*p)++  先取*p,然后自增*p; 

*++p  先自增 p,后取*p; 

++*p  右结合,自增*p; 

p[i]和*(p+i)等同


字符串

字符串常量——(字面量)字符序列

  • “how are you, guys”用双引号括起来的
  • 以字符数组方式存放:
  • 以空字符’\0’结/尾
  • 存储在内存区域的文字常量区,是无法被修改的

字符常变量——以空字符结尾的一维字符数组

  • 字符数组:容器,容量N
  • 实际长度:取决于结束符位置,0~N-1
  • 可以被修改

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注