“int * * k”的意思是什么?

3

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

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

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

我不知道 int * *k 是什么意思。它是一个整数指针还是值?它将指向什么?它包含/存储什么?这个变量有什么用?我怎样理解这个表达式?


这是两级指针解引用。 - haccks
1
"k" 是指向整数指针的指针。 - zzn
5个回答

8
int **k

k是一个指向指针的指针(双重指针),它保存了另一个指针变量的地址。

在您的示例中:

 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


谢谢。您能告诉我在什么情况下会使用指向指针的指针吗? - Bing Sun
1
@BingSun 当我们想要一个单词列表(句子),我们可以使用它。 - msc
1
@BingSun 请查看 Stack Overflow 的问题:https://dev59.com/Jm035IYBdhLWcg3wK80m - msc
1
我现在明白了。谢谢! - Bing Sun

2

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

它存储了一个内存地址,在这个内存地址中又存储着另一个内存地址,而在这个内存地址中存储了一些整数值。


1

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

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

示例:int ***k;


1
这被称为指向指针的指针。
在这里,**k的输出是100,即b的值。
  *(*k) = *(a) = *(address of b) = value of b

1
*k

意思是一些代码稍后将从地址k获取一个值。

*(*k)

这意味着一些代码稍后将从地址(*k)获取一个值。

int **k

意思是k用于整数地址解引用,但带有第二级。在变量名后面加上这个*字符就可以将其定义为指针。因此,k是指向整数的指针的指针。

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

*k

它的使用方式与定义中一样。当它是一个二级指针时,

**k

被用来获取它指向的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接