首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言指针内存分配 和没有分配的大小疑点

2012-09-03 
c语言指针内存分配 和没有分配的大小问题如题:C/C++ codechar * achar * baabcbmalloc(10)babc

c语言指针内存分配 和没有分配的大小问题
如题:

C/C++ code
char * 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 呢

热点排行