Разница между char * [number] и char (*) [number] в объявлении типа - PullRequest
0 голосов
/ 19 апреля 2020

Какая разница между этими двумя? Я знаю разницу между char * (указатель char) и char [] (массив char). Но я не уверен, что разница между char* [3] и char (*)[3]. Я думаю, что оба назовут указатель на массив символов с 3 элементами, но C ++ делает какое-то назначение между ними. Я не нашел никакой полезной информации о двух объявлениях на inte rnet.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020

Разница между char * [number] и char (*) [number] в объявлении типа

char* [number] - это массив указателей на char.

char (*)[number] - указатель на массив char.

Некоторые примеры бонусов:

char* (*)[number] - указатель на массив указателей на char.

char* (*)() - указатель на функцию, которая возвращает указатель на char.

char* (*[number])() - массив указателей на функции, которые возвращают указатель на char.

0 голосов
/ 19 апреля 2020

Этот

char* [3]

является типом массива, который имеет 3 элементов типа char *.

Этот

char (*)[3]

является типом указателя, который указывает в массив типа char [3].

Вот демонстрационная программа. В этой программе вместо типа char * [3] я буду использовать тип const char *[3], потому что в строковых литералах C ++ (которые используются в программе в качестве инициализаторов) есть типы постоянных символьных массивов.

#include <iostream>

int main() 
{
    const size_t N = 3;
    const char * a[N] = { "Hello", "everybody", "here" };

    char s[N] = { '1', '2', '3' };
    char ( *p )[N] = &s;

    for ( size_t i = 0; i < N; i++ )
    {
        std::cout << a[i] << ' ';
    }
    std::cout << '\n';

    for ( size_t i = 0; i < N; i++ )
    {
        std::cout << ( *p )[i] << ' ';
    }
    std::cout << '\n';

    return 0;
}

Выходные данные программы

Hello everybody here 
1 2 3

В программе используется массив типа const char *[3]

    const char * a[N] = { "Hello", "everybody", "here" };

и указатель типа char ( * )[3], который инициализируется адрес массива типа char[3]

    char s[N] = { '1', '2', '3' };
    char ( *p )[N] = &s;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...