[c/c++]数组名和指针的区别
- 首先要明确的是,数组名和指针还是有区别的
- 数组名本身就是一个常量地址,它是数组的首地址,并且不可修改,而数组名本身不占空间。
- 指针是一块空间,它存放了一个地址。在32位系统中,由于地址是4个字节大小,因此一个指针占用的空间就是4个字节。而64位系统中,地址是8字节大小,一个指针的大小也随之为8个字节。
- 示例:
#include <iostream>
using namespace std;
int main()
{
int i = 0;
int* i_p = &i;
int arr[10] = {};
cout << "&i: " << &i << endl;
cout << "i_p: " << i_p << endl;
cout << "&i_p: " << &i_p << endl;
cout << "arr: " << arr << endl;
cout << "&arr: " << &arr << endl;
cout << "sizeof(int): " << sizeof(int) << endl;
cout << "sizeof(int*): " << sizeof(int*) << endl;
cout << "sizeof(i_p): " << sizeof(i_p) << endl;
cout << "sizeof(arr): " << sizeof(arr) << endl;
return 0;
}
- 运行结果:
- 可以看到,指针 i_p 存放的就是 i 的地址,但 i_p 本身也是占空间的,所以 i_p 的地址 &i_p 和 i_p 存放的内容是不一样的。
- 而数组则不同,arr 和 &arr是同一个地址。
- 使用sizeof()取占用空间大小时:
- sizeof(i_p) 的值为指针的大小,即8个字节
- sizeof(arr) 的值为数组int arr[10],10个int的总大小,故为 4 * 10 = 40 个字节