【问题标题】:The same variable shared between double pointer and single pointer双指针和单指针共享同一个变量
【发布时间】:2015-09-09 12:52:50
【问题描述】:

晚上好, 关于以下代码的快速问题:

// Start of main
int i,j;
int row,col;

printf("Enter the values for row and col:\n");
scanf("%d%d",&row,&col);
int **arr=(int**)malloc(row*(sizeof(int*)));

for(i=0; i<row; i++)
{
 *(arr+i) = (int*)malloc(sizeof(int)*col);
}

// .. code after this snippet

为什么我可以将变量arr 用作指向指针的指针,然后在for 循环中将其重新用作指针??为什么我不必创建两个单独的变量?

【问题讨论】:

  • 指针是指针是指针。不管它指向什么,它仍然是一个指针。
  • 不要把malloc和朋友的结果投到C!
  • 另外,请记住,您也可以将数组索引语法与指针一起使用,并且*(arr + i) 等同于arr[i],这通常更直观(并且写得更少)。跨度>
  • 您对“再利用”有何理解?您取消引用它,但您也可以分配一个新值。您似乎错过了一些基本概念 - 没有冒犯!我可以推荐读一本C书吗?指针在(几乎)每一个重要的 C 程序中都使用,所以你真的必须很好地理解它们。每一本好书都会详细介绍这个主题。
  • Olaf - 碰巧我正在阅读 K.N. 的“C Programming : A modern approach 2nd Edition”。现在是国王,所以感谢您对我的基础知识的关注……我也知道指针的重要性,因此也感谢您。数组表示法和与之等效的指针算术使我感到困惑。我正在尝试找到每个可能的情况,其中一个等于另一个,因为目前它在我的脑海中是一个很大的混乱。除此之外,我对大多数基础知识都很好:)

标签: c arrays pointers double-pointer


【解决方案1】:

在for 循环中,您不将arr 用作pointer-to-an-int;您使用*(arr+i) 作为pointer-to-an-int,这与取消引用arr 一致,这是一个pointer-to-a-pointer-to-an-诠释。

【讨论】:

    【解决方案2】:

    您没有“重用”arr 作为指向指针的指针和指针。 arr 的类型为 int **,但随后您执行一些指针运算并使用 *(arr + i) 取消引用指针,该表达式的类型为 int *。

    此外,正如 Joachim 在 cmets 中提到的,*(arr + i) 等同于 arr[i]。使用这种表示法可以更清楚地了解您在做什么。

    【讨论】:

    • 好吧,我现在明白我的困惑了,我认为在声明和定义一个 int **arr 之后,然后在代码中我只能取消对 **arr 的引用,而不是 *arr .谢谢,点个赞。
    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    相关资源
    最近更新 更多