在51IT上正式安家,没事记一些学习中笔记。
在ubuntu10.10 32位机器上运行此程序得到各个字符到大小:
- #include<iostream>
- #include<vector>
- #include<string>
- #include<cstdio>
- using namespace std;
- int main()
- {
- cout<<"int: "<<sizeof(int)<<endl;
- cout<<"char: "<<sizeof(char)<<endl;
- cout<<"short: "<<sizeof(short)<<endl;
- cout<<"long: "<<sizeof(long)<<endl;
- cout<<"double: "<<sizeof(double)<<endl;
- cout<<"float: "<<sizeof(float)<<endl;
- cout<<"unsigned char: "<<sizeof(unsigned char)<<endl;
- 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
- #include<iostream>
- #include<cstdio>
- using namespace std;
- int main()
- {
- int x[10];
- int *p=x;
- cout<<sizeof(x)/sizeof(*x)<<endl;
- cout<<sizeof(p)/sizeof(*p)<<endl;
- return 0;
- }
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第二个指针,此时自由存储区可能会被破坏。
转载于:https://blog.51cto.com/2927868/943079