比如我定义一个数组 char a[10]。意思就是我在内存里划出一块10个字节的内存,这块内存被我命名为 a, a 的地址和 a 的值一样。
定义一个 char* p=a,意为划出4个字节的内存,这块内存里储存了 a 的地址,即分配指针类型的内存存储地址,使 p 指向了 a 的开头,可用 *p 访问 a 的值
我原来最大的困惑是以 p[i] 这样的方式访问 a 的元素,跟 a[i] 等同,加上有数组名是个指针的说法,我就以为 a 同 p 是一模一样的。
现在明白了,这里的差别在于,a相当于指针, a[i]就相当于向后移动了 i 个字节。但是 p[i] 实质上应当是 *(p+i) 这样对么?只是C语言允许我们直接简化写成 p[i] ,这么理解应该没错的吧?