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

2025-02-06 13:30:33
推荐回答(4个)
回答(1):

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

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

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

回答(2):

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

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

  3. 对!

回答(3):

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

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

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

回答(4):

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

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

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