在C语言中,我被教导我们可以通过将指针增加数组数据类型的内存大小来使用指针访问数组的元素。因此,对于存储整数的数组A,
int *ptr = &A[0];
for(int i = 0; i<3; i++)
{
printf("%p\n", *ptr)
ptr++ // here it's +4 cause int
}
将打印数组A的所有3个值。但是,由于数组的名称是一个常量指针,具有数组第一个元素的地址,因此我也看到了以下代码:
<information on site>
double *p;
double balance[10];
p = balance;
将数组名称用作常量指针是合法的,反之亦然。因此,*(balance + 4)是访问balance [4]数据的合法方法。
</informationonsite>
但是如何?如果我在指针balance中存储的地址上加上+4,如果balance []是一个int数组,则相当于对其进行递增,然后会使它从指向balance [1]移至balance [2],而不是移至平衡[4]。所以取消引用(*(balance + 4))会得到balance [1]而不是[4]的值,对吧?请解释。
编译器知道您所指向的是double数组,因此:*(x+4)
[其中x是double的]是*(double*)((char*)x + 4*sizeof(double))
说明:当使用类型A的指针时,该语句A* p = SOME_ADDRESS; p++
使p向前移动sizeof(A)
字节,这意味着它已从地址X移到地址X + sizeof(A)(以字节为单位)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句