问一个关于函数中指针存放位置的问题,有些困惑。觉得这个问题值得研究,求膜拜的大神赐教!

2024-12-04 10:06:20
推荐回答(4个)
回答1:

栈,
进程中的栈,是在进程运行时,分配的一块内存,生存期为进程运行的整个区间。
用来保存函数中的局部变量,以及函数的返回地址

char *cc()
{
char str[] = "nihao";
char *p= "world;
return p;
}

这里 变量 str[] ,p都是局部变量, 在栈上
函数结束 函数内的局部变量就不可再用
栈上的局部变量都是在编译时明确知道大小的

char str[] = "nihao";
这个是在栈上占用一块6个字节的空间,把"nihao" (五个字符和一个结束符'\0') 从常量区复制过来
char *p= "world";
这个是在栈上分配一个 char类型指针,直接指向常量区的字符串 "world"

回答2:

在栈中,他们都是局部变量

回答3:

栈中

回答4:

所有这样申请的变量都是存在栈中的,指针变量也不例外,不要因为指针变量可以指向另外一个内存的地址就把它特殊化了,其实它和普通变量没什么不一样,只是指针变量的数值可以表示另外一个有意义的数据的地址。
你可以直接把一个int类型的数值赋值一个有意义的指针的值,然后将这个int的值强制转换为指针,再把这个转换后的指针指向的数据输出,就可以看到这块指向的内存的值了。其实这些指针变量都是一些基本数据类型,没什么不同的。都是在内存中的栈空间的一小块空间。