码迷,mamicode.com
首页 > 编程语言 > 详细

[C/C++]_[初级]_[编程容易犯错的地方]

时间:2015-09-22 11:33:40      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:c++   犯错   容易   编程细节   


场景:

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





版权声明:本文为博主原创文章,未经博主允许不得转载。

[C/C++]_[初级]_[编程容易犯错的地方]

标签:c++   犯错   容易   编程细节   

原文地址:http://blog.csdn.net/infoworld/article/details/48651025

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!