C a[1]和b[1]之间的区别是什么?

C a[1]和b[1]之间的区别是什么?,c,arrays,pointers,base-address,C,Arrays,Pointers,Base Address,我正在学习c指针。我知道数组名本身就是一个指针 int a[5]={ 1 , 2 , 3 , 4 , 5 }; int *b = &a; 我的理解是: a[5] --> a contains base address consider a is at the location of 0x100 so a[5] = 0x100 + ( 5 * size_of_integer ) = 0x100 + ( 5 * 4 ) = 0x100 + ( 20 )

我正在学习c指针。我知道数组名本身就是一个指针

int a[5]={ 1 , 2 , 3 , 4 , 5 };
int *b = &a;
我的理解是: a[5] --> a contains base address
consider a is at the location of 0x100 so a[5] = 0x100 + ( 5 * size_of_integer ) = 0x100 + ( 5 * 4 ) = 0x100 + ( 20 ) = 0x120

b = &a; // b = 0x100
b[0] = 0x100
b[1] = 0x104   
a[0]和b[0]之间有什么区别吗?
(我是初学者,我可能错了)

a包含基址,而&a包含存储该基址的位置的地址

我的意思是a的值给你一个基址。 如果使用b=&a(这将分配存储基址的位置的地址) 和b=a(将a的值(即数组的基址)赋给b) 因此,如果使用b=a,那么b[0]=a[0],否则两者都不同


希望这对您有所帮助。

a
inta[5]
数组
a
指向第一个(
a[0]
)元素
b
是指向
a
的指针。您可以使用下面的代码进行检查:

#include <stdio.h>

int main()
{

    int a[5] = {1, 2, 3, 4, 5};
    int *b = &a;
    printf("a %p\n", a);         // (1) address of a array.
    printf("a[0] %p\n", &a[0]);  // (2) address of first element of a array
    printf("b %p\n", b);         // (3) address of b

    printf("b[2] %p\n", &b[2]);    // (4) means [address of b] + 2 * sizeof(int)
    printf("a[2] %p\n", &a[2]);    // (5) third element of array

    return 0;
}
我知道数组名本身就是一个指针数组名称本身不是指针

数组名本身表示数组的基址,该地址是常量,即如果
a
声明为整数数组,则不能执行
a++

int a[5]={ 1 , 2 , 3 , 4 , 5 };
int *b = &a;
让我们比较
a[2]
b[2]
,首先展开
a[2]

       a[i] == *(a + i)
       a[2] == *(0x100 +2 * 4)
            == *(0x108) 
            == 3

现在考虑<代码> B[ 2 ] < /代码>,让我们展开它。

b[2]   == *(b + 2)
       == *(0x100 +2 * 4) = *(0x108)
       == 3b[2]
a[2]
b[2]
产生相同的输出,但这并不意味着两者相同,即
a
是一个数组,
b
是一个指针

 a++ ; /* not possible as a is an array, it can't look to some other addrerss */
 b++ ; /* possible as b is pointer, it can point to any address */

[5]超出范围数组范围是从[0]到[4]这:
int*b=&a
是编译器应该警告的错误<代码>&a具有类型
int(*)[5]
(指向数组的指针)。你需要的是
int*b=a。在大多数上下文中,只写
a
相当于
&a[0]
a
不包含基址<代码>a
指定位于内存中的对象。它包含5个
int
s。但是是的,在赋值
b=a
之后,只要指针
b
没有改变,并且
a
处于活动状态,
b[n]
就相当于
a[n]
这正是我想要的。谢谢@india“数组名”本身就是常量指针。“不,不!数组不是指针,甚至不是“const”指针!所有发生的事情是,数组在特定条件下“衰减”到指向其第一个元素的指针。您能否详细说明特定条件。简短回答:长回答:问题的其余答案链接的答案。@Naveenprakash如果有帮助,请随意接受我的答案
 a++ ; /* not possible as a is an array, it can't look to some other addrerss */
 b++ ; /* possible as b is pointer, it can point to any address */