C++声明了一个变量就创建了吗?

来源:百度知道 编辑:UC知道 时间:2024/05/27 01:02:19
代码如下:

#include "stdio.h"
main(){

struct SimpleStruct {
int a;
int b;
};
SimpleStruct x;
SimpleStruct y=x;
SimpleStruct * p1=&x;
SimpleStruct * p2=&y;

printf("%d",sizeof(x));
printf("%d",sizeof(y));

if(p1 == p2){
printf("%d",1);
}else{
printf("%d",0);
}

return 0;
}

有2个疑问:
1, 变量x我只是声明了一下,x就被赋予内存空间了吗? sizeof(x)还打印出来了32。
2,为什么p1不等于p2, y与x不是指向同一内存空间吗?

sizeof(x)它是在编译阶段就起作用的
它将x的大小替换进来
cout<<sizeof(x)<<endl;
等价于
cout<<32<<endl;
也就是说sizeof并不能确认变量已经被分配内存,

虽然在本例中x已经被分配内存;
-----
SimpleStruct x;准确的来讲叫临时定义;
你可以试着在C编译器下(只能用C编译器)下编译如下代码
---
//main.c
int a;
int a;
int a;
int main(){
printf("%d",a);//这一行输出4
a=2;
printf("%d",a);//这一行输出2
getchar();
}
//var.c
int a=4;
----
此代码在c++中是错的但是在c中是正确的

此术语在网上还搜不到,我实在《c/c++深层探索》里面看到的

连接过程中全局空间没有同名符号的时候他才会被分配内存,如果有,他就只是一个变量声明.
----
x y不是同一块内存,
y=x;只是告诉编译器初始化 内存y 使它的值等于x.

一般变量(非指针),只要声明,即被分配空间。

p和y不指向同一空间,因为y不是指针变量。y这块空间中只不过存储了和p这块空间中相同的内容。

变量x声明,编译器为x分配空间,大小为sizeof(x)

p1不等于p2,是因为y与x不是指向同一内存空间,原因如下:

c++中的赋值操作符意思是按成员赋值,例如在此例中,赋值操作分两步进行:
第一步:为y分配内存空间,大小为sizeof(x)
第二步:成员赋值:y.a = x.a; y.b = x.b

现在明白了吗?

建议阅读c++ primar这