小可爱~ 发表于 2016-10-24 12:12

[分享]对数组的深入理解

本帖最后由 小可爱~ 于 2016-10-24 12:13 编辑

有理解错误的地方请见谅并指出错误

核心:数组名字其本质就是数组指针(数组的指针)
#include <stdio.h>
#include <stdlib.h>

enum Enum
{
      ONE = 1,
      TWO,
      THREE,
      FOUR,
      FIVE,
      SIX
};

void main()
{
      int a = { ONE, TWO, THREE, FOUR, FIVE, SIX };

      //数组名字其本质就是数组指针(数组的指针) 此源代码的的数组指针步长 3 也就是说 数组指针自增(+1)就是 + 3
      printf("*a = %p\n", *a);//数组第一个元素的地址
      printf("a = %p\n", a);//同上
      printf("*a + 1 = %p\n", *a + 1);//数组第二个元素的地址
      printf("*(a + 1) = %p\n", *(a + 1));//数组指针+1相当于加 3 得出的是数组 a的地址      
      printf("**a = %d\n", **a);
      printf("*(*a + 1) = %d\n", *(*a + 1));//自行体会
      system("pause");
}


小可爱~ 发表于 2016-10-24 21:00

裴冰夏 发表于 2016-10-24 19:28
那此时的a是指a的地址么,那*a+1就是第0行第1个元素的地址?有点晕

恩从一开始的话 那是第二个元素 , 从 0 开始的话那是第一个元素

裴冰夏 发表于 2016-10-24 19:28

小可爱~ 发表于 2016-10-24 12:57
这是二级数组

那此时的a是指a的地址么,那*a+1就是第0行第1个元素的地址?有点晕

aikuimail 发表于 2016-10-24 12:38

数组就是一片连续的内存,名字标识的就是这块内存的起始位置,标识整块内存。

裴冰夏 发表于 2016-10-24 12:45

*a + 1   
不是指a的值+1么

小可爱~ 发表于 2016-10-24 12:57

裴冰夏 发表于 2016-10-24 12:45
*a + 1   
不是指a的值+1么

这是二级数组

Cizel 发表于 2016-10-24 14:26

以前都没注意,我发现我看懂了*(a + 1)了。 可以再来一些 混合的形式

xttdkjje 发表于 2016-10-24 21:51

c学的都忘了差不多了

Quickfox 发表于 2016-10-25 22:50

谢谢楼主分享,学习了

随风潜入 发表于 2016-10-29 23:09

指针在编程中实在是太重要了
页: [1] 2
查看完整版本: [分享]对数组的深入理解