场景:
1. 这里总结一些日常的容易犯错的细节.
问题1:一个类A有成员变量int deleted,给定一个A的对象指针 *a, 判断deleted为真的时候输出一个语句.
一般情况下新手会这样写:
if(a) { if(a->deleted) { cout << "deleted" << endl; } }
但这样其实不够精简和浪费行数, 应该这样.
if(a && a->deleted) { cout << "deleted" << endl; }
问题2: 创建一个TCHAR*(wchar_t*)的路径字符串.
注意: malloc出来的大小是和数组声明的大小是不一样,你觉得以下存储的路径够大吗?
wchar_t* info = (wchar_t*)malloc(MAX_PATH);
这样定义的大小只有MAX_PATH的字节,不能存储 MAX_PATH的宽字节.要这样定义才能支持MAX_PATH 个大小的宽字节,以下才是相同的:
#include <iostream> #include <stdlib.h> using namespace std; int main(int argc, char const *argv[]) { wchar_t* info = (wchar_t*)malloc(sizeof(wchar_t)*MAX_PATH); std::cout << "sizeof(wchar_t)*MAX_PATH: " << sizeof(wchar_t)*MAX_PATH << std::endl; wchar_t info2[MAX_PATH]; std::cout << "info2: " << sizeof(info2) << std::endl; return 0; }
输出:
sizeof(wchar_t)*MAX_PATH: 520 info2: 520
问题3:误以为指针+1就是地址值+1
指针p+n的规则是(char*)p + sizeof(*p)*n ,也即是p指针类型的大小决定递增的倍数.
#include <iostream> #include <stdlib.h> using namespace std; int main(int argc, char const *argv[]) { wchar_t* info = (wchar_t*)malloc(sizeof(wchar_t)*MAX_PATH); std::cout << "sizeof(wchar_t)*MAX_PATH: " << sizeof(wchar_t)*MAX_PATH << std::endl; wchar_t info2[MAX_PATH]; std::cout << "info2: " << sizeof(info2) << std::endl; std::cout << (int*)info << ":" << (int*)(info+1) << std::endl; std::cout << (int*)((char*)(info)+sizeof(*info)*1) << ":" << (int*)(info+1) << std::endl; return 0; }
输出:
sizeof(wchar_t)*MAX_PATH: 520 info2: 520 0x506cc0:0x506cc2 0x506cc2:0x506cc2
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-19 14:03:05