Maximilien
это указатель на указатель. (слишком коротко для настоящего ответа).
Simon Bang Terkildsen
Коротко но верно
Albert Holguin
не думайте, что ответы должны быть определенной длины... вы всегда можете перейти по ссылке Для справки...
это указатель на указатель. (слишком коротко для настоящего ответа).
Коротко но верно
не думайте, что ответы должны быть определенной длины... вы всегда можете перейти по ссылке Для справки...
Хорошая связь, +5
Это хорошо, мой 5-й.
--СА
В заявлении:
int *p;
p
это указатель (нет *p
)int ** q;
q
является ли указатель указателем на int
.*a
, **a
невозможно правильно интерпретировать без контекста. printf("%d\n"), **q);
q
это двойной указатель.
Хорошая штука, пятерка.
--СА
Спасибо.
Мой 5 за то, что я был первым, кто не попал в ловушку смешивания разыменований с определениями указателей :-)
Или, по крайней мере, ты опередил меня на посту...
На самом деле, *a
является синтаксически правильным только в том случае, если a
сам по себе является указателем, и в этом случае *a
не могут быть a
просто потому, что типы не совпадают, независимо от того, какой тип a
определяется, чтобы указать на него.
Вероятно, вы имеете в виду синтаксис, используемый для определения переменной (указателя) :
int f1() { int a; // this is a variable of type int a = 1; return a; // this will return the value 1 } void f2() { int *a; // this is a pointer to a value of type int int b; a = &b; // now a points to the contents of b b = 2; return *a; // returns the value of b, which is 2 } void f3() { int **a; // this is a pointer to a pointer to a value of type int int *b; int c = 3; b = &c; // ok, b points to the contents of c a = &b; // a now points to the contents of b which points to the contents of c return **a; // returns 3 }
Пример кода стоит тысячи слов. Мой 5.
Лучший ответ для новичка. my 5
Он называется двойным указателем,в большинстве случаев используемым для указания на динамически создаваемые двумерные массивы.
По следующей ссылке есть еще несколько обсуждений:
http://www.daniweb.com/software-development/c/threads/69966[^]
Я исправил твою ссылку.
Спасибо,мне было интересно, почему гиперссылка не работает!
На самом деле это двойное разыменование, а не двойной указатель. ;-)
Конечно, все знают, о чем мы говорим, но мы должны быть более краткими при объяснении базового синтаксиса языка Си новичку. См. ответ К. Паллини (и мой - но к. Паллини опередил меня)
**a-это указатель на *a.
В противном случае это представление 2-мерного указателя.
согласитесь с этим:
a[] is array of a. AND a[][] is array of a[]. suppose you have: #define m=3 #define n=2 ///////////// ... int a[m][n]; int i,j; for(i=0;i<m;i++)> for(j=0;j<n;j++)> { /////// } Like this you can access: int **a; //use alloc or malloc to initialize the 2 dimentional pointer for(i=0;i<m;i++)> for(j=0;j<n;j++)> { /////// }