#include<stdio.h>
#include<conio.h>
void vaibhav()
{
int a;
printf("%u\n",&a);
}
int main()
{
vaibhav();
vaibhav();
vaibhav();
getch();
return 0;
}
每次我都得到相同的变量地址
a
。这与编译器有关吗?我正在使用Dev C++ IDE。#include<stdio.h>
#include<conio.h>
void vaibhav()
{
int a;
printf("%u\n",&a);
}
int main()
{
vaibhav();
vaibhav();
vaibhav();
getch();
return 0;
}
a
。这与编译器有关吗?我正在使用Dev C++ IDE。void func_which_calls_vaibhav()
{
vaibhav();
}
int main()
{
vaibhav();
func_which_calls_vaibhav();
return 0;
}
一个函数中局部变量的地址取决于在调用该函数时执行点的栈状态(即SP寄存器的值)。
以您的示例为例,每次调用函数vaibhav
时堆栈的状态都是相同的。
这并非必要,您可能会或者不会得到相同地址的值。请使用%p
代替。
printf("%p\n", (void *)&a);
%p
格式说明符来打印变量的地址。%u
和%d
用于显示整数值。而在调用函数vaibhav()
时,堆栈上的地址可能每次相同或不同。vaibhav()
的堆栈虚拟内存分配/释放,都可能导致相同的地址变量a
被存储。 - Sunil Bojanapally
%u
?你应该使用%p
来打印地址,并将指针强制转换为void *
类型。 - ajayint main(void)
。 - alk