C a[1]和b[1]之间的区别是什么?
我正在学习c指针。我知道数组名本身就是一个指针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 )
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 */