按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
这个指针。很遗憾,C)里 
const修饰的并不是 
stu3指向的对象。那 
const这时候到底修饰
的是什么呢?我们在讲解 
constinti的时候说过 
const放在类型名“int”前后都行;而 
constint 
*p与 
int* 
constp则完全不一样。也就是说,我们看 
const修饰谁都时候完全可以将数据类
型名视而不见,当它不存在。反过来再看“constStu_pststu3”,Stu_pst是“structstudent 
{ 
/*code*/} 
*”的别名; 
“structstudent{/*code*/} 
*”是一个整体。对于编译器来说,只认为 
Stu_pst是一个类型名,所以在解析的时候很自然的把“Stu_pst”这个数据类型名忽略掉。
现在知道 
const到底修饰的是什么了吧?^_^。
1。17。3,typedef与#define的区别
噢,上帝!这真要命!别急,要命的还在后面呢。看如下例子: 
E), 
#defineINT32 
int 
unsignedINT32 
i=10; 
F),typedefintint32; 
unsignedint32 
j=10;
其中 
F)编译出错,为什么呢? 
E)不会出错,这很好理解,因为在预编译的时候 
INT32
被替换为 
int,而 
unsigned 
int 
i 
= 
10;语句是正确的。但是,很可惜,用 
typedef取的别
名不支持这种类型扩展。另外,想想 
typedef 
staticintint32行不行?为什么?
下面再看一个与#define宏有关的例子: 
G),#definePCHAR 
char* 
PCHARp3;p4; 
H),typedef 
char*pchar; 
pchar 
p1;p2;
两组代码编译都没有问题,但是,这里的 
p4却不是指针,仅仅是一个 
char类型的字符。
这种错误很容易被忽略,所以用 
#define的时候要慎之又慎。关于#define当然还有很多话题
需要讨论,请看预处理那一章。当然关于 
typedef的讨论也还没有结束,在指针与数组那一
章,我们还要继续讨论。
1。17。4,#define 
aint'10'与 
typedef 
inta'10';
留两个问题: 
1),#definea 
int'10' 
A);a'10' 
a'10'; 
B);a'10' 
a; 
C);int 
a'10'; 
D);int 
a; 
E);a 
b'10'; 
F);a 
b; 
G);a* 
b'10'; 
H);a* 
b; 
2);typedef 
inta'10'; 
A);a'10' 
a'10'; 
B);a'10' 
a; 
C);int 
a'10'; 
D);int 
a; 
E);a 
b'10'; 
F);a 
b; 
G);a* 
b'10'; 
H);a* 
b; 
3),#definea 
int*'10' 
A);a'10' 
a'10'; 
B);a'10' 
a; 
C);int 
a'10'; 
D);int 
a; 
E);a 
b'10'; 
F);a 
b; 
G);a* 
b'10'; 
H);a* 
b; 
4);typedefint* 
a'10'; 
A);a'10' 
a'10'; 
B);a'10' 
C);int 
D);int 
E);a 
F);a 
G);a* 
H);a* 
5),#define 
a; 
a'10'; 
a; 
b'10'; 
b; 
b'10'; 
b; 
*a 
int'10' 
A);a'10' 
a'10'; 
B);a'10' 
a; 
C);int 
a'10'; 
D);int 
a; 
E);a 
b'10'; 
F);a 
b; 
G);a* 
b'10'; 
H);a* 
b; 
6);typedefint 
(* 
a)'10'; 
A);a'10' 
a'10'; 
B);a'10' 
a; 
C);int 
a'10'; 
D);int 
a; 
E);a 
b'10'; 
F);a 
b; 
G);a* 
b'10'; 
H);a* 
b; 
7),#define 
*a 
* 
int'10' 
A);a'10' 
a'10'; 
B);a'10' 
a; 
C);int 
a'10'; 
D);int 
a; 
E);a 
b'10'; 
F);a 
b; 
G);a* 
b'10'; 
H);a* 
b; 
8);typedefint* 
(*a)'10'; 
A);a'10' 
a'10'; 
B);a'10' 
a; 
C);int 
a'10'; 
D);int 
a; 
E);a 
b'10'; 
F);a 
b; 
G);a* 
b'10'; 
H);a* 
b;
请判断这里面哪些定义正确,哪些定义不正确。另外, 
int'10'和 
a'10'到底该怎么用?
第二章符号
符号有什么好说的呢?确实,符号可说的内容要少些,但总还是有些可以唠叨地方。
有一次上课,我问学生:‘/’这个符号在 
C语言里都用在哪些地方?没有一个人能答完整。
这说明 
C语言的基础掌握不牢靠,如果真正掌握了 
C语言,你就能很轻易的回答上来。这
个问题就请读者试着回答一下吧。本章不会像关键字一样一个一个深入讨论,只是将容易
出错的地方讨论一下。
表(2。1)标准 
C语言的基本符号 
符号名称符号名称
,逗号 
》右尖括号 
。圆点 
!感叹号
;分号 
|竖线
:冒号 
/斜杠
?问号 
反斜杠 
’单引号 
~波折号 
“双引号 
#井号 
(左圆括号 
)右圆括号 
'左方括号 
'右方括号 
{左大括号 
}右大括号 
%百分号 
& 
and(与) 
^ 
xor(异或) 
*乘号 
…减号 
=等于号