变量只声明不赋值占不占内存?还有一个变量int a=12;a不断的变化,它内存地址是不是也不断的变?
展开全部
是这样的楼主:
如果你只声明一个变量而没有给他赋值的语句:
如果这个代码在C语言中,并且在之后的代码里面你没有用到这个变量,编译成程序运行时,编译器自动帮你删掉你的声明语句!所以就不占内存;如果你用它了,他就是一个随机数,就会占内存。
如果这个代码在Java里面,Java不允许你去使用一个没有初始化的变量,编译时肯定帮你删掉,所以也不会占内存。
a的值本身如果不断变化的话,a的地址不会发生变化的。如果你不信,可以这样测试
int a = 12;
int* addr = &a; 获取a的地址。
printf("%d\n",addr); 显示出a的地址,然后:
a = 16; a的值发生变化
printf("%d\n",addr); 再次显示出a的地址,必须一样,不一样你干我!
楼上楼下的人没有主动跟过编译成的汇编源码,完全是想当然,不要轻信。
如果你只声明一个变量而没有给他赋值的语句:
如果这个代码在C语言中,并且在之后的代码里面你没有用到这个变量,编译成程序运行时,编译器自动帮你删掉你的声明语句!所以就不占内存;如果你用它了,他就是一个随机数,就会占内存。
如果这个代码在Java里面,Java不允许你去使用一个没有初始化的变量,编译时肯定帮你删掉,所以也不会占内存。
a的值本身如果不断变化的话,a的地址不会发生变化的。如果你不信,可以这样测试
int a = 12;
int* addr = &a; 获取a的地址。
printf("%d\n",addr); 显示出a的地址,然后:
a = 16; a的值发生变化
printf("%d\n",addr); 再次显示出a的地址,必须一样,不一样你干我!
楼上楼下的人没有主动跟过编译成的汇编源码,完全是想当然,不要轻信。
更多追问追答
追问
int a如果转换成了float a,地址还变不变?
追答
当你定义了一个int a ,如果再继续定义float a
编译的时候就会告诉你: 错了! 两个一样名称的变量。
展开全部
以标准编程要求来说,变量定义必须给出初始值,如果你不给他初始值一般系统会给个默认值
也就是说还是占用内存的,变量内容改变,其地址是不变的。(这里不变是相对的,如果你关闭程序,再运行,这是变量a的地址和前一次就可能不同)
也就是说还是占用内存的,变量内容改变,其地址是不变的。(这里不变是相对的,如果你关闭程序,再运行,这是变量a的地址和前一次就可能不同)
更多追问追答
追问
不关闭程序,变量数据类型改变了,地址会不会变?比如int变成float
追答
不会变的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这样的问题不需要死记硬背,只需要几局代码就能解释清楚
int n; // 声明一个变量,并没初始化
printf("%d\n", sizeof(n)); // 打印n所占的字节数,对于32位系统来说,一个int类型的变量占4个字节,因此n是占内存的
printf("%p\n", &n); // 打印n的地址出来,这里也能证明,n在内存里面是有地址的,是要占内存的
n = 2; // 给n赋值
printf("%p\n", &n); // 再打印一下n的地址,发现跟上面打印的地址是一样的,因此n的值的改变不影响n的地址
int n; // 声明一个变量,并没初始化
printf("%d\n", sizeof(n)); // 打印n所占的字节数,对于32位系统来说,一个int类型的变量占4个字节,因此n是占内存的
printf("%p\n", &n); // 打印n的地址出来,这里也能证明,n在内存里面是有地址的,是要占内存的
n = 2; // 给n赋值
printf("%p\n", &n); // 再打印一下n的地址,发现跟上面打印的地址是一样的,因此n的值的改变不影响n的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.变量只声明不赋值
2.还有一个变量int a=12;a不断的变化,内存地址不变。
给个例子:
#include <stdio.h>
int main(void)
{
int a;
printf("%p\n", &a);
a=12;
printf("%p\n", &a);
a=24;
printf("%p\n", &a);
}
2.还有一个变量int a=12;a不断的变化,内存地址不变。
给个例子:
#include <stdio.h>
int main(void)
{
int a;
printf("%p\n", &a);
a=12;
printf("%p\n", &a);
a=24;
printf("%p\n", &a);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询