1.struct与class区别:
当然C语言只存在struct,而且它只是个结构的封装体。
在C++中,struct与class只有两种区别:
1)默认继承权限:struct为public,class为private
2)默认成员访问权限:同上。
其他严格意义上来说都是一样的。
功能上class已经完全取代了struct,但是有些情况还会选择struct:一些轻量级并不需要严格封装的结构;为了与传统的api进行通讯有时不得不用struct;当然有时选择struct使得代码看起来更简洁一些。
2.程序的内存分配与例子
1)栈区(stack):由系统进行分配释放,存储局部变量,函数参数等。结构类似于Stack。
2)堆区(heap):又程序员进行分配释放,如果程序员没有释放则有os进行释放,比如malloc和new等操作。结构类似于链表。
3)全局区(静态区static):全局变量和static变量存储在一块。初始化的放在一块,为初始化的放在相邻一块。程序结束后由系统释放。
4)文字常量区:常量字符串。程序结束由系统释放。
5)代码区:存储二进制代码。
例子:
//main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456/0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); 123456/0放在常量区,编译器可能会将它与p3所指向的"123456"
优化成一个地方。
}