C语言中的声明,初始化,指令

MyLion

我正在准备有关C编程的考试,并且遇到了以下问题,我不确定该如何回答:

“给出了以下语法正确的声明。假定所有变量已在后续指令中初始化:

void *vptr, *wptr;
char *s;
size_t vsize, ssize;
int cmp;

这些指令中的三个在语义上是不正确的,并且会导致编译错误,这是什么?

  1. vptr++;
  2. cmp = vptr == wptr;
  3. vsize = sizeof(*vptr);
  4. s = wptr;
  5. s = vptr - 1;
  6. vptr = malloc(ssize * sizeof *s);

当我尝试以某种方式(使用gnu编译器)编译它们时,我从未收到错误。但是我的猜测是3、5和6是不正确的,因为我试图获取void的大小(3),访问/分配未分配的内存(5)并分配内存而不释放先前的内存(6)。我不太确定自己的答案,再加上我不明白为什么这些说明对所有编译都适用。有人解释吗?

用户名

几乎正确。

错误的是(a),(c)和(e)(编辑后的1,3,5)。

它们的解释基本上是相同的:(a)和(e)执行指针算术,这在上是不可能的void *,因为它void是未知的并且没有大小。(c)类似,再次sizeof()给出一个void表达式,void没有大小。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章