赞
踩
数组的地址和数组首元素的地址在编译器上可能输出相同的地址
int main() {
int arr[] = { 1 };
printf("%p\n", &arr);
printf("%p\n", arr);
return 0;
}
C和C++等语言中,数组是一种复合数据类型,可以存储相同类型的多个元素。当我们谈论数组的地址时,我们通常指的是整个数组的起始地址,也就是数组第一个元素的地址。但这并不意味着数组的地址和数组首元素的地址是完全相同的,尽管它们在数值上可能相同。
以下是它们之间的主要区别:
1.类型不同:
数组的地址:它是指向整个数组的指针,其类型是数组类型(例如,int (*p)[10]表示一个指向含有10个整数的数组的指针)。
数组首元素的地址:它是指向数组第一个元素的指针,其类型是该元素的类型(例如,int *p表示一个指向整数的指针)。
2.解引用行为:
当你解引用数组的地址时,你会得到一个数组。例如,如果你有一个指向10个整数的数组的指针int (*p)[10],*p将得到一个包含10个整数的数组。
当你解引用数组首元素的地址时,你会得到数组的第一个元素。例如,如果你有一个指向整数的指针int *p,*p将得到一个整数。
3.指针算术:
当你对数组的地址进行指针算术运算时,你会跳过整个数组。例如,p+1会使p前进到下一个同类型数组的位置。
当你对数组首元素的地址进行指针算术运算时,你会逐个元素地前进。例如,p+1会使p前进到数组中的下一个整数位置。
尽管数组的地址和数组首元素的地址在数值上可能相同(在大多数现代系统上),但它们在类型和行为上是不同的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。