const char * против char для массива (одинарные и двойные кавычки) в c ++ - PullRequest
0 голосов
/ 27 июня 2018

Я новичок в C ++

1)

#include <iostream>

using namespace std;

int main() {
    char arr[4];
    arr[0] = 'H';
    arr[1] = 'e';
    arr[2] = 'l';
    arr[3] = 'o';
    for (int i = 0; i < 4; i++) {
        cout << arr[i] << endl;
    }
    system("pause");

}

2)

#include <iostream>

using namespace std;

int main() {
    const char* arr[4];
    arr[0] = "H";
    arr[1] = "e";
    arr[2] = "l";
    arr[3] = "o";
    for (int i = 0; i < 4; i++) {
        cout << arr[i] << endl;
    }
    system("pause");
}

Если я использую "" для char[] массива или '' для const char*[] массива, это не сработает.

Может ли кто-нибудь помочь мне понять разницу, почему это происходит, и объяснить, что на самом деле означает const char* 1016 *

1 Ответ

0 голосов
/ 27 июня 2018

Но если я использую "" для массива char или '' для массива const char *, это не так работа

В первом примере вы создаете массив из 4 chars - char arr[4]; Это означает, что каждый элемент arr является char. 'H' - это char, 'e' - это char и т. Д. Поэтому, когда вы присваиваете char элементу массива, который является char, он работает.

Во втором примере вы создаете массив из 4 указателей на const char - const char* arr[4]; Это означает, что каждый элемент вашего массива является указателем и указывает на char, который вы обещаете не изменять. "H" является строковым литералом, который представляет собой массив из 2 - char 'H' и завершающий ноль '\0'. Этот массив превращается в указатель на его первый элемент, который равен 'H' - const char (то же самое для остальных букв). Ваш массив представляет собой массив указателей на const char, вы назначаете указатель на const char, поэтому он работает.

Если вы поменяете '' на "", это не будет работать, поскольку типы элементов массива не будут совпадать с данными, которые вы будете назначать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...