📌  相关文章
📜  “ int array [5]”的“ array”和“&array”有什么区别?

📅  最后修改于: 2021-05-30 02:49:46             🧑  作者: Mango

如果有人定义了一个数组,例如“ int array [5] ”,那么“ array ”或“ &array ”的含义是什么?他们都是一样的还是不同的?您可能会认为它们都将指向数组的第一个元素,即它们都将具有相同的地址。让我们找出答案!

为了进行检查,首先想到的是以下程序。

#include "stdio.h"
int main()
{
   int array[5];
  
   /* If %p is new to you, you can use %d as well */
   printf("array=%p : &array=%p\n", array, &array);
  
   return 0;
}

因此,“ array ”和“ &array ”的地址相同。同样,您很容易以为两者是相同的。好吧,他们不是!变量及其&(即地址)如何相同。看起来不合逻辑,但我们看到“ array ”和“ &array ”都在打印相同的地址。也许现在下结论还为时过早。这篇文章的重点是,即使它们都导致相同的地址,但它们是不同类型的地址。这就是“ array ”和“ &array ”之间的区别。

为了显示这种差异,我建议您看一下以下程序。

#include "stdio.h"
int main()
{
   int array[5];
  
   /* If %p is new to you, you can use %d as well */
   printf("array=%p : &array=%p\n", array, &array); 
  
   printf("array+1 = %p : &array + 1 = %p", array+1, &array+1);
  
   return 0;
}

使用指针算术,我们知道将整数添加到指针时会发生什么。因此,您可以在不运行该程序的情况下猜出上述程序的输出吗? “ array + 1 ”和“ &array + 1 ”不应指向相同的地址。好吧,你可能会惊讶🙂

基本上,“数组”是“指向数组的第一个元素的指针”,而“ &array ”是“指向5 int的整个数组的指针”。由于“ array ”是指向int的指针,因此加1会导致地址的增量为4(假设您计算机中的int大小为4个字节)。由于“ &array ”是指向5个整数的数组的指针,因此加1会导致地址的增量为4 x 5 = 20 = 0x14。现在您将了解为什么这两个看似相似的指针在核心级别上有所不同。该逻辑也可以扩展到多维数组。假设double twoDarray [5] [4]是2D数组。此处,“ twoDarray”是指向4 int数组的指针,而“&twoDarray”是指向4 int的5行数组的指针。如果听起来有点晦涩难懂,则在添加1之后,您总可以有一个小程序来打印这些代码。我们希望可以澄清所有数组名称本身都是指向第一个元素的指针,但是数组名称的&(即地址)为指向整个数组本身的指针。

如果您发现以上有用,请执行点赞/推文/ G + 1。另外,请留下您的评论以进一步澄清或获取信息。我们很乐意帮助和学习🙂

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”