c присвоение указателя указателю на указатель, что это значит - PullRequest
0 голосов
/ 25 сентября 2011

У меня есть фрагмент кода, который я пытаюсь понять.

char *c;   // c is uni dimensional table ( single row )

char **p ; // p is a two dimensional table 

**p = *c;  // what does this mean ?

Когда я делаю вышеупомянутое назначение, копируется ли c как первая строка p?

или c копируется как первый столбец p?

Ответы [ 3 ]

6 голосов
/ 25 сентября 2011

** р = * с;// что это значит?

Когда я делаю вышеупомянутое присваивание, копируется ли c как первая строка p?или c копируется как первый столбец p?

Также этот код не копирует первый элемент c в первый элемент p.Эквивалентно

p[0][0] = c[0];
1 голос
/ 25 сентября 2011
char *c;   // c is uni dimensional table ( single row )

Нет, c - это указатель, а не массив. Если вы правильно его инициализируете, он может указывать на первый элемент массива, но сам указатель не является массивом.

char **p ; // p is a two dimensional table 

Нет, p - указатель на char*; это не стол. Опять же, это может указывать на то, что действует как двумерный массив. Настоящий двумерный массив - это просто массив массивов, но есть несколько других способов использовать указатели для имитации более гибких версий двумерных массивов с динамическим размещением и переменными размерами строк.

**p = *c;  // what does this mean ?

Если p и c не были инициализированы, это означает неопределенное поведение (что означает, что ваша программа вылетает , если вам повезет . Если они были правильно инициализированы: p баллов объекту char*; назовем этот объект pstar. pstar указывает на объект char; давайте назовем этот объект pstarstar. c также указывает на объект char; давайте назовем его cstar. Присвоение копирует значение cstar в pstarstar.

Что означает , зависит от того, на что p и c указывают.

Рекомендуемое чтение: раздел 6 из comp.lang.c FAQ .

0 голосов
/ 25 сентября 2011

Это означает, что char, на который указывает c, копируется на все, на что указывает p, на *.

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