" int * * k&#34 ;?的含义是什么?

时间:2017-02-14 06:30:36

标签: c pointers pointer-to-pointer

我是C编程语言的初学者。我在书上看到了一个代码:

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

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

我不知道int * *k的含义。这是整数指针还是值?它会指向什么?它包含什么/存储?这个变量的用途是什么?我怎么能理解这个表达?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

int** k是指向int指针的指针。

它存储一个存储器地址,在该存储器地址中存储另一个存储某个整数值的存储器地址。

答案 2 :(得分:1)

它被称为双指针。它可以用来存储单指针的地址。

您还可以创建三重指针来存储来自双指针的地址。

示例:int ***k;

答案 3 :(得分:1)

这称为指针指针。

这里,** k的输出是100,b的值。

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

答案 4 :(得分:1)

*k

表示某些代码稍后会从地址k获取一个值。

*(*k)

表示某些代码稍后会从地址(* k)中获取值。

int **k

表示k用于整数使用的地址解除引用,但具有第二级。将*字符放在其定义的变量名后面,使其成为指针。所以k是指向整数的指针。

获取指针指向的单元格的值,

*k

就像在定义中一样使用。然后当它是二阶指针时

**k

用于获取其指向值。