在51IT上正式安家,没事记一些学习中笔记。
在ubuntu10.10 32位机器上运行此程序得到各个字符到大小:
 
  
  1. #include<iostream> 
  2. #include<vector> 
  3. #include<string> 
  4. #include<cstdio> 
  5. using namespace std; 
  6. int main() 
  7. cout<<"int: "<<sizeof(int)<<endl
  8. cout<<"char: "<<sizeof(char)<<endl
  9. cout<<"short: "<<sizeof(short)<<endl
  10. cout<<"long: "<<sizeof(long)<<endl
  11. cout<<"double: "<<sizeof(double)<<endl
  12. cout<<"float: "<<sizeof(float)<<endl
  13. cout<<"unsigned char: "<<sizeof(unsigned char)<<endl
  14. return 0; 
 
root@fengye:/home/fengye/hello# g++ f1.cc -o f1
root@fengye:/home/fengye/hello# ./f1
int: 4
char: 1
short: 2
long: 4
double: 8
float: 4
unsigned char: 1
 
 
  
  1. #include<iostream> 
  2. #include<cstdio> 
  3. using namespace std; 
  4. int main() 
  5. int x[10]; 
  6. int *p=x; 
  7. cout<<sizeof(x)/sizeof(*x)<<endl; 
  8. cout<<sizeof(p)/sizeof(*p)<<endl; 
  9. return 0; 
  10.  
root@fengye:/home/fengye/hello# ./f2 10
1
sizeof(x)是指数组x[10]所占的空间为40;
sizeof(*x)是指向x数组的第一个常量所占空间为4
sizeof(p)是指针变量p所占的存储空间的字节数为4
sizeof(*p)是指指针变量p所指向的对象所占的空间为4
 strlen(s) 返回s到长度,不包括字符串结束符null
char ca[]={'c','a','d'}
cout<<strlen(ca)<<endl;
ca没有一个null到结束符到字符数组,则计算结果不可预料。

优先级:
++优先级高于*操作副
圆括号凌驾于优先级上
赋值操作右结合性
算术操作符左结合

delete p 执行该语句后,p变成不确定到指针,很多机器上尽管p值没有明确定义,但仍然存放类它之前所指向到对象到地址,然而p所指向到内存已经释放,因此p不再有效。
删除指针后,该指针变成悬垂指针,悬垂指针指向曾经存放对象到内存,但该对象已经不再存在类。悬垂指针往往导致程序错误很难检测出来。

动态内存管理容易出错:
1)删除指向动态分配内存到指针失败,因而无法将该内存返回给自由存储区为内存泄漏。内存泄漏很难发现,一般需要等到应用程序运行一段时间后,耗尽所有内存空间时,内存泄漏才会显露出来。
2)读写已删除对象,如果删除指针所指向到对象后,将指针置为0值,则比较容易检测出这类错误。
3)对同一个内存空间使用两次delete表达式。当两个指针指向同一个动态创建到对象,删除时就会发生错误。如果在其中指针上坐delete运算,将该对象到内存空间返还给自由存储区,然后接着delete第二个指针,此时自由存储区可能会被破坏。