C语言 初学者求教:一个指针变量赋值的问题,vc++6.0

# include <stdio.h>
# include <malloc.h>
# include <string.h>

int main(void)
{
char * p = (char*)malloc(10*sizeof(char)); // 第三行,问题 1
strcpy(p, "hello");

printf("%s\n",p);
printf("%s\n",*p); //程序出错

return 0;
}

问题1:第三行代码我可以不可以这么理解:定义一个char *类型变量。变量名为p。
为 p 在内存中了 一定大小的 动态内存。
请问,p本身有一个内存地址,p里的指针指向 动态内存,*p指向动态内存?
还是 p 本身就是动态内存,*p会调用动态内存存储里的垃圾值,指向未知内存?

问题2:p是char * 类型的指针变量,里面只能存储指针变量。
hello是一个字符串。为什么能把 字符串 放到一个char * 类型的指针变量里??
问题3:字符串放进去之后,*p 变成什么了???
问题1补充:当定义一个char *类型变量,系统这时候在内存分配了一个静态地址给p。*p调用p里的垃圾值,指向未知内存。
malloc函数之后,p原来的静态地址是否还存在?
p是不是变成了动态地址,*p直接调用动态内存里的值?

    你的理解是对的,p是地址,*p指向内存里的值

    hello是放到了p指向的内存里

    *p是一个char

追问

感谢您的回答。小弟还有疑问。
问题1补充:当定义一个char *类型变量,系统这时候在内存分配了一个静态地址给p。*p调用p里的垃圾值,指向未知内存。
malloc函数之后,p原来的静态地址是否还存在?
p是不是变成了动态地址,*p直接调用动态内存里的值?
hello是放到了p指向的内存里. strcpy(p, "hello"); 这里为什么是p,而不是*p?p是指针,*p才是p指向的内存、、、

追答

当然存在,只不过不能去使用而已,所以最好养成习惯,定义变量的时候最好同时初始化,防止不小心用到了异常值

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-05-25
子夜吴歌·夏歌(李白)
相似回答