1.void指针的安全操作有:
1.把任何对象的指针值赋给空指针.
2.两个空指针相互赋值,并可比较相等.
3.可以显示地把空指针转换的另一类型.
除此之外其他所有操作都是不安全的.看下例:
void f(int* pi){
void* pv = pi; //ok
*pv; //error,void* 不能间接引用
pv ++; //error,void不能增量(不知道被指对象的大小)
int* p2 = static_cast<int*> (pv); //ok
double* pd1 = pv; //error
double* pd2 = pi; //error
double *pd3 = static_cast<double*> (pv); //不安全
}
2.结构类型对象的大小(sizeof)未必是其成员大小之和,这是因为许多机器都在分配内存是做"对齐"操作,如把整数分配在机器字的边界上.在这些机器上,对齐会在结构中造成"空洞",使得结构的大小多余成员大小这和.
ps:字符串总是以'/0'结束.这是为了兼容标准函数,如strlen,strcmp等等.