2017-02-14 4 views
3

Я начинаю с языка программирования C. Я видел код на книгу:В чем смысл «int * * k»?

#include<stdio.h> 
int main(){ 
    int * * k, *a, b=100; 

    a = &b; 
    k = &a; 
    printf("%d\n",* * k); 
} 

я не знаю смысла int * *k. Является ли это целым указателем или значением? на что он указывает? что он будет хранить/хранить? Какая польза от этой переменной? Как я могу понять это выражение?

+0

Это двухуровневый указатель разыменования. – haccks

+1

«k» - это указатель, указывающий на целочисленный указатель – zzn

ответ

2

int** k - указатель на указатель int.

Он хранит адрес памяти, в этом адресе памяти есть другой адрес памяти, в котором хранится некоторое целочисленное значение.

8
int **k 

k является указателя на указатель на INT (двойной указатель) и содержит адрес какого-либо другого переменного указатель.

В вашем примере:

int b = 100; /* 'b' is an int, initialized to value 100 */ 
int *a = &b; /* a is a pointer-to-int*/ 
int **k = &a; /* k is a pointer-to-pointer-to-int */ 

Смотрите рисунок ниже для лучшего понимания:

ptr

+0

Спасибо.можете ли вы сказать мне, в какой ситуации этот указатель на указатель будет использоваться? –

+1

@BingSun Когда нам нужен список слов (предложение), мы можем это использовать. – rsp

+1

@BingSun См. Вопрос о переполнении стека: http://stackoverflow.com/questions/5580761/why-use-double-pointer-or-why-use-pointers-to-pointers – rsp

1

Это называется двойной указатель. Он может использоваться для хранения адреса из одного указателя.

Вы также можете создать тройной указатель для хранения адреса с двойным указателем.

Пример: int ***k;

1

Это называется указатель на указатель.

Здесь выход для ** k равен 100, значение b.

*(*k) = *(a) = *(address of b) = value of b 
1
*k 

означает некоторый код будет получить значение из адреса к позже.

*(*k) 

означает, что какой-то код получит значение от адреса (* k) позже.

int **k 

означает k предназначен для использования адреса разыменования для использования целого, но со вторым уровнем. Имея этот символ * сразу за именем переменной в его определении, он делает его указателем. Таким образом, k является указателем на указатель на целое число.

Чтобы получить значение ячейки, что указатель указывает на,

*k 

используется так же, как в определении. Затем, когда это указатель второго порядка, то

**k 

используется, чтобы получить его остроконечное значение.