C++笔试、面试、基础问题笔记
2017-09-19 11:21
381 查看
一、sizeof和strlenstrlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'/0'为止,然后返回计数器值。1.
char* p = new char[100];//sizeof(p)的结果为4 int* p = new int[100];//sizeof(p)的结果也为42.char D1[23];//sizeof(D1)为23int D2[23];//sizeof(D2)为92(23*4)注意:sizeof()得到的分配的内存的字节数,和是否使用无关,例如,char a[8]={'a','b'},则sizeof(a)的值仍为8。3.char ss[] = "0123456789"; sizeof(ss) 结果 11 ===》ss是数组,计算到/0位置,因此是10+14.char str0[8] = { 'a', 'b', 'c', 'd', 'e', 'f', 'i', 'g' }; char str1[] = "abcdefig";cout << strlen(str0) << endl;//因为没有 /0 结尾,所以strlen的返回不可知cout << sizeof(str0) << endl;//结果为8cout << strlen(str1) << endl;//结果为8cout << sizeof(str1) << endl;//结果为9,会自动加/0结尾由以上知,strlen计算的是实际值,而sizeof是实际值+1int a[] = { 1,2 };cout << sizeof(a) << endl;//结果为8char str2[] = "01234/056789";char str3[] = "abcse/0fgkij";cout << strlen(str2) << endl;//结果为12cout << strlen(str3) << endl;//结果为12总结:动态分配的数组不能用sizeof()来确定数组的字节大小。二、menset()函数函数原型是:void *memset(void *s, int ch, size_t n);首先menset()是以字节为单位对初始化空间进行初始化的。所以说,对于char类型可初始化为任意值,而整形数组只能初始化为'\0'也就是NULL,ASCII码值为0.(数字 0的ASCII码值为48,A为65,a为97)。memset(iBuf, 48, sizeof(char)* 10); //ibuf为char类型,则把内存置为0如下例子,// 对整型数组进行初始化int iBuf[10];memset(iBuf, 0, sizeof(int)* 10);for (int i = 0; i < 10; ++i){cout<< iBuf[i];}输出结果为 0000000000// 对字符型数组进行初始化char iBuf[10];memset(iBuf, 0, sizeof(char)* 10); //for (int i = 0; i < 10; ++i){cout<< iBuf[i];}输出结果为 空,若改为cout<<(int)iBuf[i];则结果为 0000000000// 对字符型数组进行初始化char iBuf[10];memset(iBuf, 65, sizeof(char)* 10); //for (int i = 0; i < 10; ++i){cout<< iBuf[i];}输出结果为 AAAAAAAAAA 若改为cout<<(int)iBuf[i];则结果为65656565656565656565上面的例子之所以没有出错就是因为初始化为0(指ASCII码值为0,即NULL),但是如果初始化为1,那么因为int一般是4个字节,那么相当于将一个int元素初始化成了00000001 00000001 00000001 00000001,这样对于一个int元素肯定不是1,而是一个很大的数,结果出乎意料。即当memset(, 0 ,)时,对于字符型置为NULL,对于整形则置为0。
相关文章推荐
- c++学习笔记三-常见基础问题
- JAVA基础笔试、面试常见问题集合
- [C++基础]C++笔试题中非常常见的sizeof问题
- 面试题——C/C++经典问题,及面试笔试题
- C,C++经典问题,及面试笔试题
- C++面试基础问题
- C,C++经典问题,及面试笔试题
- 笔试面试那件小事(常见的C++基础题)
- [C/C++基础知识] 面试再谈struct和union大小问题
- c_c++基础问题(平时读书时笔记)
- C++笔试面试遇到的问题
- Java程序基础测试 基础笔试、面试常见问题集合
- C\C++基础知识,面试常见问题(转…
- C/C++笔试面试常见问题1
- C++ 面试 笔试 题 笔记
- 面试题 C/C++经典问题,及面试笔试题
- net基础笔试、面试常见问题集合
- C/C++面试笔试中经典的字符串常量内存问题
- 转]C,C++经典问题,及面试笔试题
- JAVA基础笔试、面试常见问题集合