亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

数组和指针的关系

数组和指针之间的关系

在本教程中,您将了解 C 编程中数组和指针之间的关系。您还将学习使用指针访问数组元素。

在了解数组和指针之间的关系之前,请务必检查以下两个主题:


数组和指针的关系

数组是一个顺序数据块。让我们编写一个程序来打印数组元素的地址。

#include <stdio.h>
int main() {
   int x[4];
   int i;

   for(i = 0; i < 4; ++i) {
      printf("&x[%d] = %p\n", i, &x[i]);
   }

   printf("Address of array x: %p", x);

   return 0;
}

输出

&x[0] = 1450734448
&x[1] = 1450734452
&x[2] = 1450734456
&x[3] = 1450734460
Address of array x: 1450734448

数组 x 的两个连续元素之间有 4 个字节的差异 .这是因为 int 的大小 是 4 个字节(在我们的编译器上)。

注意,&x[0] 的地址 和 x 是一样的。这是因为变量名 x 指向数组的第一个元素。

<图>

从上面的例子可以清楚地看出 &x[0] 相当于 x .而且,x[0] 相当于 *x .

同样,


示例 1:指针和数组

#include <stdio.h>
int main() {

  int i, x[6], sum = 0;

  printf("Enter 6 numbers: ");

  for(i = 0; i < 6; ++i) {
  // Equivalent to scanf("%d", &x[i]);
      scanf("%d", x+i);

  // Equivalent to sum += x[i]
      sum += *(x+i);
  }

  printf("Sum = %d", sum);

  return 0;
}

当你运行程序时,输出将是:

Enter 6 numbers: 2
3
4
4
12
4
Sum = 29 

在这里,我们声明了一个数组 x 6 个元素。为了访问数组的元素,我们使用了指针。


在大多数情况下,数组名称衰减为指针。简单来说,数组名称被转换为指针。这就是您可以使用指针访问数组元素的原因。但是,您应该记住,指针和数组并不相同 .

在少数情况下,数组名称不会衰减为指针。了解更多,请访问:数组名何时不会衰减为指针?


示例 2:数组和指针

#include <stdio.h>
int main() {

  int x[5] = {1, 2, 3, 4, 5};
  int* ptr;

  // ptr is assigned the address of the third element
  ptr = &x[2]; 

  printf("*ptr = %d \n", *ptr);   // 3
  printf("*(ptr+1) = %d \n", *(ptr+1)); // 4
  printf("*(ptr-1) = %d", *(ptr-1));  // 2

  return 0;
}

当你运行程序时,输出将是:

*ptr = 3 
*(ptr+1) = 4 
*(ptr-1) = 2

在此示例中,&x[2] ,第三个元素的地址,分配给 ptr 指针。因此,3 在我们打印 *ptr 时显示 .

并且,打印 *(ptr+1) 给了我们第四个元素。同样,打印 *(ptr-1) 给了我们第二个元素。


C语言

  1. 大数据和云计算的关系是什么?
  2. C++ 指针和数组
  3. C 传递地址和指针
  4. C 结构体和指针
  5. 电动机中电压和电流的关系
  6. 改善运维关系
  7. C和Java之间的区别
  8. 物联网与边缘计算的关系
  9. SCADA和HMI的区别
  10. 直流电机和交流电机的区别
  11. 钎焊和锡焊的区别
  12. 2冲程和4冲程发动机的区别