我编写了这个程序来检查本地变量和全局变量的地址。我读到堆栈段存储局部变量和数据段存储全局变量。但是当我执行这个程序时,两个变量的地址没有太大的区别,这意味着它们必须在同一个段中。无法理解为什么会这样..这里是代码和输出 -本地和全局变量的地址
#include<stdio.h>
int *chr;
void main(){
int *char1;
printf("global- %p \n local- %p",chr,char1);
chr=malloc(sizeof(int));
char1=malloc(sizeof(int));
printf("malloc_global = %p \n malloc_local = %p",chr,char1);
}
输出 -
global- (nil)
local- (nil)
malloc_global = 0x969010
malloc_local = 0x969030
理解*任何*类型都可以。你不需要声明指针。声明'char foo;'并打印'printf(“%p”,&foo);''将打印'foo'的位置。 – ArjunShankar
@ArjunShankar:使用'%p'转换说明符打印的指针应该转换为与'void *'兼容的类型,如果它们不在。尽管在现代系统中很少见,但不同类型的指针可能具有不同的表示形式,并且传递与'void *'不兼容的类型以'%p'打印时具有C标准未定义的行为。 –
@EricPostpischil - 你是对的。我的意见最初意味着作为对此问题的回答(与OP的“printf(”%p“)相反的早期(现已删除)评论的补充,它建议将printf(”%p“,&chr) CHR)')。 – ArjunShankar