c++,tips

1,#pragma once的作用?
一般用于头文件开始,预编译时,只插入一次此头文件。
例如 头文件  "grandfather.h" 
#pragma once
#ifndef GRANDFATHER_H
#define GRANDFATHER_H
struct foo
{
    int member;
}; 
#endif /* GRANDFATHER_H */
当这段程序多次被include ( 多文件编译,相互include时会遇到),只插入和编译一次。
#pragma once  的编译速度 比 #ifndef GRANDFATHER_H  #define GRANDFATHER_H ..快,
所以往往 全用。
二,  string  char   类型转换

C下面没有string类型。字符串就是字符数组嘛,自己处理好了。没有单独的string类型。 

1,string  转化为 

char* string tstr;

char *tch

tch = (char *)tstr.c_str();

1、sizeof会计算实际内存空间,strlen会计算C风格的字符串的实际字符数(不包括\0)。
2、以字符串形式出现的,编译器都会自动添加\0。
3、char a[6] = "Hello";这是不敌的,因为后者是一个常量。
4、char a[] = "Hello";是正确的,因为a相当于一个指针。
5、char a[] = "Hello";等价于char a[] = {"Hello"};
6、char *s = "Hello";这个也带有\0。
7、c++中的c风格字符串时带有\0的字符数组。


看了太多关于内存使用上出问题的代码,感觉很多人知道new,知道malloc,却不知道该如何管理,觉得有必要讲讲c/c++程序对内存占用类型的区别. 
引用一个前辈注释的例子.请新手朋友仔细看看每一处,你是否都清楚? 
//main.cpp 
int a = 0; //a,全局变量,存储在全局初始化区 
char *p1; //p1,全局变量指针,全局未初始化区(注意,p1没有new或者malloc,它是一个空指针,你乱用就是野指针,但是它是地址,本身也占32位的空间) 
main() 

int b;    //main()函数的栈区 
char s[] = "abc"; //main()函数的栈区 
char *p2; //  p2也是指针,main()函数的栈区 
char *p3 = "123456";  //123456\0在常量区,p3在main()函数的栈区 
static int c =0;      //全局(静态)初始化区 
p1 = (char *)malloc(10); 
p2 = (char *)malloc(20);      //分配得来得10和20字节的区域就在堆区。但是p1在全局区,p2在main()函数的栈区,你懂了吗? 
strcpy(p1, "123456");        // 123456\0放在常量区,编译器可能会将它与p3所指向 
的"123456"优化成一个地方 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值