c++ - char* const args[] 定义

标签 c++ c linux constants

<分区>

我在这里无法理解 const 的用法:

char* const args[]; 

这是否意味着 args 不能指向新地址?它与以下内容有何不同:

const char* args[];

我还尝试遍历此列表并使用单个 for 循环语句将值附加到字符串:

string t_command;
for(char** t= args; (*t) != NULL ; t++ && t_command.append(*t + " ")) {}

我没有在这里做某事,我不知道是什么。

最佳答案

char* const args[]; 

args 是一个数组。数组中的每个元素都是指向 char 的指针。这些指针是 const。您不能修改数组的元素以指向其他任何地方。但是,您可以修改它们指向的 char

const char* args[]; 

args 仍然是一个数组。数组中的每个元素仍然是指向 char 的指针。但是,指针不是 const。您可以修改数组的元素以指向别处。但是,您不能修改它们指向的char

图表时间:

Args:
┌───┬───┬───┬───┬───┬───┐
│   │   │   │   │   │   │  // In the first version, these pointers are const
└─╂─┴─╂─┴─╂─┴─╂─┴─╂─┴─╂─┘
  ┃   ┗━┓ ┗━┅ ┗━┅ ┗━┅ ┗━┅
  ▼     ▼
┌───┐ ┌───┐
│ c │ │ c │                // In the second version, these characters are const
└───┘ └───┘

通常,当你有一个指向字符的指针时,这些字符本身就是数组的一部分(C 风格的字符串),在这种情况下它看起来像这样:

Args:
┌───┬───┬───┬───┬───┬───┐
│   │   │   │   │   │   │  // In the first version, these pointers are const
└─╂─┴─╂─┴─╂─┴─╂─┴─╂─┴─╂─┘
  ┃   ┗━━━━━━━┓   ┗━┅ ┗━┅
  ▼           ▼
┌───┬───┬┄  ┌───┬───┬┄
│ c │ c │   │ c │ c │      // In the second version, these characters are const
└───┴───┴┄  └───┴───┴┄

至于遍历数组,您试图将 args 数组视为以 null 结尾的数组。大多数数组不是这样工作的。您应该使用数组的索引进行迭代。

另请注意,您不能将数组和字符串文字相加(如 *t++ "")。将一侧转换为 std::string 以使其更容易。

所以如果 Nargs 的大小:

for (size_t i = 0; i < N; i++) {
  t_command.append(std::string(args[i]) + " "))
}

关于c++ - char* const args[] 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15576291/

相关文章:

c++ - 为什么 BigInt、BigNum 或任意精度算术没有出现在 STL 或 C++ 的标准库中?

c++ - 变形代码和多态代码有什么区别?

linux - bash 输入/输出到日志文件

c++ - 返回 CStringArray 给出错误

c# - 从 .NET 附加到 COM 服务器中的事件时出现 E_ACCESSDENIED 异常

c - 基于程序运行时的崩溃

C - scanf() 然后是 getenv()

c - 如何调用编译时声明未知的函数

linux - "type"命令在 Git Bash 上未按预期工作

c - 为什么这个 fork() 输出产生 8 而不是 5?