C语言指针申明的变量都存储在静态区吗

int main () {
char *str ="helloworld";

int *p = 10;

}
我想问的str为什么就是存储在静态去的。那p存储在内存什么地方的呀。菜鸟希望高手指点下。

    首先在C语言中,所有的字符串(注意不是数组字符串),都属于静态储存类别的,也就是C规定字符串必须为存放在静态栈。

    你用指针str指向了"helloworld"的地址,所以str也是指导了静态栈之中,如果你用数组来声明字符串就不会是这个样子了。

    char str[ ]="helloworld":表示首先在静态栈创建"helloworld",然后再把静态栈的字符串字面量(就是字符串的内容)拷贝到str数组之中;

    你用 p指向了整数10的地址,指针是存放在动态栈中的,一旦遇到{号就被清空了,直到下一次被调用

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-29
char *str ="helloworld"; 这个是将"helloworld"的地址,存到了str中。"helloworld"是常量,存储在一个所谓的静态区! str只是存的地址
int *p = 10; 而这个是将10这个数存储到了p中!追问

可是指针只能存地址的。怎么会存整型值

追答

地址就是个整形数!
你可以通过以下代码看一下:
int i=100, *p=&i ;
printf( "%p\n", p );
printf( "%d\n", p );
printf( "%p\n", i );
printf( "%d\n", i );

本回答被网友采纳
第2个回答  2014-08-29
指针来说 他必须有 指针本身 和指针指向的值 在你这里 指针本身就是 str 和p 指针指向的东西就是"helloworld"和10 指针本身在栈区 两个东西在一个特殊的常量区; 如果指针过期 就是遇到了 } 这个东西也不用delete 他会自动消亡 如果是 int *p = new int[3] 这个数组就是在堆区 也是同样道理只不过他必须手动删除了 补充一个 你的这个int *p是错的 p是int *类型 10是int类型 编译要出错 道理没错 但是写错了

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网