nctit09 Ответов: 5

*a-это указатель, так что ж **а ?


*a-это указатель, так что ж **а ?
Помогите мне !

Maximilien

это указатель на указатель. (слишком коротко для настоящего ответа).

Simon Bang Terkildsen

Коротко но верно

Albert Holguin

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

5 Ответов

Рейтинг:
37

Marc A. Brown

Делает этот[^- помочь?


Albert Holguin

Хорошая связь, +5

Sergey Alexandrovich Kryukov

Это хорошо, мой 5-й.
--СА

Рейтинг:
28

CPallini

В заявлении:

int *p; 

p это указатель (нет *p)
Объявление переменной может быть интерпретировано следующим образом:
*p - это int, следовательно, p-указатель на int.

Аналогичное рассуждение дает
int ** q;

q является ли указатель указателем на int.

Вообще говоря, выражения *a, **a невозможно правильно интерпретировать без контекста.
Например, утверждение
printf("%d\n"), **q);

(если правильно) скажите нам q это двойной указатель.


Sergey Alexandrovich Kryukov

Хорошая штука, пятерка.
--СА

CPallini

Спасибо.

Stefan_Lang

Мой 5 за то, что я был первым, кто не попал в ловушку смешивания разыменований с определениями указателей :-)

Или, по крайней мере, ты опередил меня на посту...

Рейтинг:
24

Stefan_Lang

На самом деле, *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
}


CPallini

Пример кода стоит тысячи слов. Мой 5.

Ashish Tyagi 40

Лучший ответ для новичка. my 5

Рейтинг:
2

hakz.code

Он называется двойным указателем,в большинстве случаев используемым для указания на динамически создаваемые двумерные массивы.
По следующей ссылке есть еще несколько обсуждений:
http://www.daniweb.com/software-development/c/threads/69966[^]


Smithers-Jones

Я исправил твою ссылку.

hakz.code

Спасибо,мне было интересно, почему гиперссылка не работает!

Stefan_Lang

На самом деле это двойное разыменование, а не двойной указатель. ;-)

Конечно, все знают, о чем мы говорим, но мы должны быть более краткими при объяснении базового синтаксиса языка Си новичку. См. ответ К. Паллини (и мой - но к. Паллини опередил меня)

Рейтинг:
2

Аslam Iqbal

**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++)>
{
///////
}