C++程序设计随笔(二)

  指针:

指针的实现是希望能直接隐射到程序运行所在的机器上的地址机制。

能过独立的进行分配和通过内部指针类型指向的最小对象就是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];

这就会出错:如

void f(){

  char *p = "Plato";

  p[4] = 'e';//这就会出错,因为 定义相当时是const char *p

}

注意::

例如:(p 、q都是char*)

if(q == p)

这里==是比较地址的。

 

数组:

数组不具备自描述性,就是说不能像char[]那样遍历,因为数组不像字符串那样包含一个结束符。就得以某种方式提供它的元素个数。例如:

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;
}

 

posted @ 2014-03-13 21:59  菜园的鸟  阅读(137)  评论(0编辑  收藏  举报