【问题标题】:IntelliSense Error C ProgrammingIntelliSense 错误 C 编程
【发布时间】:2015-05-24 20:33:56
【问题描述】:

我正在处理 C 分配,并在以下代码中遇到一些错误

char BA[20] = "Hellow there";
char *pBA;
*pBA = &BA;

代码第三行的 * 和 & 下有一条红线。我收到这些错误:

  1. IntelliSense:此声明没有存储类或类型说明符
  2. IntelliSense:“char (*)[20]”类型的值不能用于初始化“int *”类型的实体

有没有办法解决这个问题?

【问题讨论】:

  • 第三行要做什么?您正在尝试将数组的 address 分配给 uninitialised dereferenced 指针。
  • pBA = BA; 就足够了。

标签: c


【解决方案1】:

这样做的一个好方法是 -

char BA[20] = "Hellow there";
char (*pBA)[20] = &BA; 

char BA[20] = "Hellow there";
char (*pBA)[20] = NULL;
*pBA = &BA;

也就是说,指向数组的指针在 C 中相当少见,而是使用指向指针的指针。

【讨论】:

【解决方案2】:

其实错误在第3行。

char BA[20] = "Hellow there";
char *pBA;
pBA = BA;   //Note :- Address must be passed to a pointer, not to value at the pointer, *pBA means value at pBA

这将解决您的目的!我希望你发现你的错误。

【讨论】:

  • &BA 不是char *,而是char (*)[20]。这是 C,所以它可能会“工作”,但由于类型不同,至少应该生成一个警告。
  • 我是用 CodeBlocks 做的,它没有显示任何错误!!!相反,我使用 printf() 打印了 &BA 和 pBA 值。它正确地反映了答案!
  • 是的,运行时没有出现高编译器警告。
  • 试图将char (*)[20] 值存储到NULL 指向的char[20] 中? Not sure if you're serious or trolling...
  • @undefinedbehaviour- 那是一年前的事了,那天我明白了我的错误。除了收到反对票外,我无能为力,因为我什至无法删除我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
  • 2023-03-27
相关资源
最近更新 更多