【问题标题】:What is the difference between these two pointer declarations?这两个指针声明有什么区别?
【发布时间】:2016-08-01 05:23:51
【问题描述】:

这些声明是不同的还是产生相同的结果?

char * const *argv;

const char **argv;

有区别还是都是指针指向的指针?

背景是我正在编写一个 C 命令行 shell 并将这个结构用于命令:

struct command
{
    char * const *argv;
};

上述结构用于调用exec。现在,当我查看另一个问题时,结构有所不同:

Connecting n commands with pipes in a shell?

在那个问题中,实现相同目标的结构是不同的。

【问题讨论】:

  • This entry in the C-faq 可能会有所帮助(加上对您的情况的一些推断)。
  • @Shripada 显示的代码中没有数组。只有指针。
  • 可能duplicate
  • 我对一件事很好奇。你的意思是真的 ==>> const char **argv; 还是你的意思 ==>> const char *argv;
  • @Michi 我将尝试为问题添加一些背景。

标签: c posix pipeline


【解决方案1】:

它们完全不同:

char *const *argv; 声明“一个指向 const 指向 char 的指针”;

const char **argv; 声明“指向 const char 的指针的指针”;

另外,char **const argv; 声明“一个 const 指向 char 指针的指针”。

要理解这些声明,请尝试“从里到外”阅读它们:http://c-faq.com/decl/cdecl1.html

【讨论】:

  • 答案可能是基于错误的输入。我认为他的意思是const char *argv;。少一星:)
猜你喜欢
  • 2015-06-07
  • 2012-04-01
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多