c语言指针内存分配 和没有分配的大小疑点
c语言指针内存分配 和没有分配的大小问题如题:C/C++ codechar * achar * baabcbmalloc(10)babc
c语言指针内存分配 和没有分配的大小问题 如题:
C/C++ codechar * a;char * b;a="abc";b=malloc(10);b="abc"; 如上:代码 指针 a和b 有什么区别 他们的内存分配按什么来呢
如果a我下次 赋值 a="abfdfgsdfhfghgfh";有没有溢出的的可能呢
谢谢
[解决办法] 我觉得你有点误解。 a 和 b 是字符指针, 它们的大小和指向的字符或者字符串没有关系,它们本身有固定大小,只是指向了某个地方而已。所以 a=“abc”, a指向字符串, b=malloc(10),b指向一个10字节的空间,
b="abc", b再指向字符串“abc”。
[解决办法] 同上。
指针的大小是固定的,指针指向的内容大小不是固定的。
[解决办法] 其实主要是内存的空间位置不一样。在windows平台下上面的代码是不可能通过编译的。在linux下用gcc可以通过编译。a在栈空间,b在堆空间。
[解决办法] 指针a和b都是指针,都是4个字节,指针本身都不在堆上,只是指向的内存位置不一样;
a指向的是静态存储区上常量字符串"abc"的首地址;
b指向的是堆上连续空间为10个字节的内存的首地址,类似于一个数组的首地址,至于这10个字节存储什么,自定义;
b的赋值是错误的,就好比将"abc"存到char arr[10]一样,不能直接用等号,用strcpy类型的库函数赋值;
a = "abfdfgsdfhfghgfh"不会越界,字符串"abfdfgsdfhfghgfh"和"abc"均存储在静态存储区,是常量字符串,赋值给a时,只是将其首地址存储到指针a,字符串占用的内存是在静态存储区自动分配和回收的;
[解决办法] http://www.cnblogs.com/guyan/archive/2011/12/23/2299179.html
可以看看
[解决办法] 探讨 还有个搞不明白的问题 C/C++ code char *a; char b[]={'a','b','c'}; 怎么将数组b赋值给a 呢