指针:
指针的实现是希望能直接隐射到程序运行所在的机器上的地址机制。
能过独立的进行分配和通过内部指针类型指向的最小对象就是char。一个bool量最少也要占据char那么大的空间。
零
在典型情况下0被表示为一个适当大小的全零的二进制的模式。没有任何对象会被分配到地址0,因此0也被做为一个指针文字量,表明一个指针当时没有指向任何对象。
在c中宏NULL表示0指针,C++建议使用0.或者定义宏const int NULL = 0;
字符串函数:strlen()就是依靠0来确定字符串结束,就是‘\0’.
字符串:
一个字符串文字量里包含的字符个数比它看起来的字符数多一个,它总是由一个空字符‘\0’结束。空字符串的值是0.
例如:
sizeof("bohr") ;//== 5
字符串文字量的类型是“适当个数的const字符的数组”,所以“bohr”的类型就是const char[5];
这就会出错:如
1
2
3
4
5
6
7
|
void
f(){
char
*p = "Plato" ;
p[4] = ‘e‘ ; //这就会出错,因为 定义相当时是const char *p
} |
注意::
例如:(p 、q都是char*)
if(q == p)
这里==是比较地址的。
数组:
数组不具备自描述性,就是说不能像char[]那样遍历,因为数组不像字符串那样包含一个结束符。就得以某种方式提供它的元素个数。例如:
1
2
3
4
5
6
7
|
void
f(){
int
cSize = 7;
const
char c[cSize];
for ( int
i = 0;i < cSize;i++){
use(c[i]);
}
} |
const表示常量,直接表达“不变化的值”
const实际上改变了类型,也就是说,它限制了对象能够使用的方式,并没有描述常量应该如何分配。
指针和常量
将一个指针的声明用const“预先固定”,将使那个对象成为常量,而不是这个指针。例如:
void fl(char *p){ char s[] = "Gorm"; const char *pc = s;//指向了s,就是s成了常量 pc[3] = ‘g‘;//错误:pc是指向了常量,s是常量了 pc = p;//正确 }
char *const cp;//表示指针为常量,指针是指向字符的
结构体:(struct)
数组是相同类型的元素的一个聚集,一个struct则是任意类型元素的一个聚集。
在完整声明被看到struct之前,不能去声明这个结构类型的新对象。
struct No_good{ No_good member;//错误:递归定义 }
可以将一个名字声明为结构的名字。
struct List;//声明一个结构的名字,后面定义 struct Link { Link* pre; Link * suc; List* member_of; } struct List{ Link* heah; }