char*的数组

use*_*060 5 c++

我遇到了数组指针的问题.我看过谷歌,到目前为止,我的尝试是徒劳的.

我想做的是,我有一个字符名称[256].我将成为其中的10个.因此,我需要通过指针跟踪每一个.

试图创建一个指向它们的指针.

int main()
{
    char superman[256] = "superman";
    char batman[256] = "batman";
    char catman[256] = "catman";
    char *names[10];
    names[0] = superman;
    names[1] = batman;
    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我如何实际遍历指针数组?

nos*_*nos 8

names [0]对于存储在names [0]中的任何内容都是char*(在这种情况下是指向superman数组中第一个元素的指针),因此您的猜测cout << names[0] << endl;是正确的.

如果你想遍历那个数组,你需要知道何时停止,这样你就不会遍历你尚未初始化的指针 - 如果你知道你已经初始化了其中的两个指针,你可以做到,例如

for(int i = 0; i < 2 ; i++) {
  std::cout << names[i] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

作为替代方法,在已初始化的最后一个元素之后放置一个NULL指针(确保该NULL指针有空间),例如

names[2] = NULL;
for(int i = 0; names[i] != NULL ; i++) {
  std::cout << names[i] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)


Oli*_*ops 7

为什么不使用字符串和字符串向量来存储名称?SMPL:

#include <string>
#include <iostream>
#include <Vector>

//using namespace std;

int main(void) {
    std::string superman = "superman";
    std::string batman = "batman";
    std::vector<std::string> names;
    names.push_back(superman);
    names.push_back(batman);
    for (unsigned int i = 0; i < names.size(); ++i) {
        std::cout << names[i] << std::endl;
    }
    char c; std::cin >> c;
}
Run Code Online (Sandbox Code Playgroud)