2012-01-04 3 views
2

Из книги:C++ язык программирования, глава 5.9 упражнение 1

Писать заявления на следующее: указатель на характер, это были массив из 10 целых чисел, реф-разностный на массив из 10 integers, a указатель на массив символьных строк, указатель на указатель на символ , постоянное целое число, указатель на константное целое число и указатель константы на целое число. Инициализируйте каждый.

Я смущен «указателем на массив символов». Чего хочет Страуструп? Это подразумевается буквально? Каким путем?

Прямой и простое решение:

char* c[] = {"foo", "bar", "baz"}; 
char** c_ptr; 

Или это один:

typedef char carray[20]; 
typedef array* carray_ptr; 
carray_ptr ptr = new carray[10]; 

Что вы думаете? (Хорошо, указатель на указатель не очень прямой.)

+1

'Инициирование системы читать мысли Страуструп. Ожидание для взлета ... ' –

+0

Книга кажется хорошей. Лучше, чем немецкий «C++ von A bis Z», переведенный «C++ от A до Z». Но упражнения без решений - не помогают. Даже если бы «компаньонная книга» была доступна, я бы ее не купил. – Peter

ответ

2

С помощью таких тестов деклараций часто бывает проще использовать такой инструмент, как cdecl. Я думаю, что в данном случае то, что книга ищет это:

c 

является указателем:

*c 

в массив:

(*c)[] 

символьных строк:

char *(*c)[] 

или от cdecl:

cdecl> declare c as pointer to array of pointer to char 
char *(*c)[] 

Я только высказал предположение о том, что ожидает, что книга, но так как следующий запрос «указатель на указатель на символ», это было бы странно для двух, чтобы спросить то же самое.

+0

Выглядит аккуратно для меня! Спасибо! Stroustrup не показывает это в своих образцах во время главы, а только строку о указателе на функции. Я с нетерпением жду следующей главы (включая приоритет оператора), которая должна мне помочь. – Peter

0
typedef char* character_string; 
typedef character_string[20] array_of_character_strings; 
typedef array_of_character_strings* pointer_to_array_of_character_strings; 
pointer_to_array_of_character_strings ptr; //done 

или:

char*(*var)[20]; 

показано на: cdecl.ridiculousfish.com, "объявить вар как указатель на массив 20 указатель на символ"

0

1) Глава 5 о «Указатели, массивы и структуры ». Я не вижу каких-либо «typedef», скрывающих главу, поэтому я не буду использовать их в этом упражнении.

2) Можно было бы указать на «ARGV» как отличный пример «Указатель на массив символьных строк»:

int main (int argc, char *argv[]) 

3) «c_ptr» в первом примере, конечно, работать (хотя может быть, лучшее название может быть "c_pp";)):

char* c[] = {"foo", "bar", "baz"}; 
char** c_ptr = c; 

«Надежда, что помогает!

0

разбить его на этапы:

  1. Указатель на массив: T (*p)[N]

  2. T = char const * дает вам: char const * (*p)[N]

  3. Мы инициализируем указатель с адресом существующей вещи , поэтому сначала создайте массив:

    char const * arr[] = { "hello", "world" };

  4. Теперь инициализацию парень из (2): char const * (*p)[2] = &arr;

Смежные вопросы