急求C语言高手解答三个题目!!!详细说明最好!!!

以下是我对这三个题目的疑惑,望高手解答。好的追加。

第一题:第三行中的malloc函数是不是这样的,你向它申请若干字节,它给你的是地址?为什么最后会向0地址写入?什么是0地址?

第二题:第三行中a[5]不是已经越界了么,为什么最后还能得到结果?

第三题:使用malloc就可以做出运行时可以随时改变大小的数组(错误)

我的理解是数组一旦定义了,整个大小都不能变,对不对?

    malloc在没有足够空间申请的时候会返回NULL,也就是0

    因为&是取址运算符,注意,是运算。最后的q-p实际上等于q地址-p地址的偏移量,系统很智能的给出了偏移5个int

    realloc才可以在运行时改变空间的大小(数组的大小)

追问

第一个是不是说这个程序一直运行运行,到最后没有空间了,就返回一个0地址?

第二个后面还有一个逗号没看见。。。。勿怪勿怪

希望解答更详细些,谢谢了!

追答

1.当系统再无空间可以分配给程序的时候,malloc会因为申请不到内存而返回NULL值
2.像我说的一样,&是个运算符,用个不太合适的比喻来说就是他会计算出距离a[0]的5个元素的地址,是算出来的,所以并不会读写那个并不属于你的空间,因此不会跳出错误。
而地址相减应该是个很常见的操作了,就不赘述了。
3.malloc只能用于申请内存空间,但该函数无法重新调整空间大小。而realloc才可以调整空间大小。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-09

    malloc给你的是地址,0地址就是NULL,while(1)一直执行,直到没有内存可以申请,就返回NULL,此时p的值就为NULL,下面的语句向0地址写入数据,程序就会终止

    a[5]没越界...就算越界了,比如a[6],虽然越界了,可不代表它没有值,但他的值是不确定的

    对!

第2个回答  2015-02-09
1, malloc无空间时返回NULL,即0. 当指针指向0地址时,则是空指针,这里是不允许直接写入的。所以或奔溃退出

2. 数组a的大小是6,因为5后面还有个逗号。 q指向第六个元素,p指向第1个元素,两个整型指针相减为5.

3. 大小不是你想变,想变就能变。 一旦分配就不能再改变分配空间的大小了(除非释放后重新分配)追问

第一个明明选B好么........是不是这个程序一直在执行,最后没有空间了就返回0地址?

居然没看到逗号...........我也是够了

追答

⊙﹏⊙b汗。。失误了。。,答案是B。。堆上空间不足,导致分配失败,返回NULL,即0.

第3个回答  2015-02-09

    malloc返回连续的存储单元的首地址  0地址不可用。

    a数组实际元素为 1 2 3 4 5 0 所以a[5]存在 地址差为5。

    数组一旦定义了,整个大小都不能变。 但是可以在程序运行时确定数组长度(使用动态联编定义动态数组)