数组名和数组名的地址为何相等
int main()
{
int arr[] = { 0 };
printf("%p\n", arr);
printf("%p", &arr);
return 0;
}
运行结果如下:
0000007418AFF764
0000007418AFF764
数组名表示的就是arr数组首元素的地址,然后&arr表示的是整个数组arr,但是由于内存的访问都是一个字节为单位,所以这里&arr虽然意义上是整个数组,但是显示的结果与arr表示的一致。你再给数组增加几个元素,打印arr+1和&arr+1,会发现结果完全不同了。前者表示arr数组第二个元素的首地址,后者表示整个数组的下一个地址。一个+1跳过4字节,一个跳过整个数组
数组名其实就是地址
不信请看
#include <stdio.h>
int main()
{
int arr[] = { 123 };
printf("%d\n", *arr);
return 0;
}
123
不知道你这个问题是否已经解决, 如果还没有解决的话:如果有多个可执行文件,那么静态库中的同一个函数的代码就会被复制多次,而动态库只有一份,因此使用静态库占用的磁盘空间相对比动态库要大。