您的位置:首页 > 编程语言 > C语言/C++

学习笔记-delete p与delete []p-sizeof()-strtok

2015-12-09 17:33 309 查看
1.delete p 与 delete []p区别

对于基本数据类型,二者等价,对于用户自定义的数据类型,二者是不等价的。为了避免出错,就记着 delete 对应 new ,delete []对应new []

C中是malloc 与 free,只管释放空间,C++中new/delete会调用析构函数。

参考链接:
http://www.360doc.com/content/14/0729/16/14505022_397915881.shtml http://blog.csdn.net/wwwsq/article/details/5310912 http://www.cnblogs.com/stoneJin/archive/2011/11/07/2239177.html
2.sizeof()问题

sizeof()单数为数据类型,返回值为数据类型所占字节数。

2.1注意参数为数组时,若数组是sizeof()所在函数传入的参数,因为数组传递时候会退化为指针,所以这个运算结果变成一个指针大小,而不是期望的数组大小;

2.2空类编译器自动安插一个char,所以空类大小为1,继承两个空类的空类大小还是1,虚继承时编译器为该类安插一个指向父类的指针,指针大小为4,虚继承两个类则为8(虚继承不考虑空类);

2.3类或者结构的大小必须为最大数据的整数倍,即最终结果为大于类内所有数据类型大小之和的、且为最大数据类型整数倍的最小数(数据对齐)

2.4普通函数不占大小,类内有虚函数表(不计大小),类内有一个指向虚函数表的指针(无论有多少虚函数这个表只有一个)

2.5父类私有数据不可用,但是可见,所以占子类大小

参考链接:
http://blog.chinaunix.net/uid-26868581-id-3328170.html
3.char *strtok(char s[], const char *delim)函数

这个函数的作用是分解字符串,第一个参数为带分解字符串,第二个参数为分隔符,返回分割后第一子串的指针,示例:

char *tokenPtr=strtok(abc," ");
while(tokenPtr!=NULL)
{
cout<<tokenPtr<<"**";
tokenPtr=strtok(NULL," ");
}
//假如abc="a:1 b:2 c:3"将会输出a:1**b:2**c:3**,即将字符串不断按照第二个参数分割。
//这个函数最大的问题在于不能嵌套,比如上述输入想在循环内嵌套strtok函数来再分解a:1,则会出错。这与这个函数实现方式有关,内部维护了一个静态变量,所以第二次调用第一个参数可以为NULL,如果嵌套,改变了这个静态变量则会出错
有网友提供了这个方法: http://blog.csdn.net/jakewwwww/article/details/9105109
但是我测试的时候还是不行得。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++