数组和指针的区别

数组和指针的区别

1. 概念

  • 数组:数组是用于存储多个相同类型数据的集合。
  • 指针:指针相当于一个变量,但是它和不同变量不一样,它存放的是其它变量在内存中的地址。

2. 赋值,存储方式,求sizeof,初始化

1.赋值

同类型指针变量可以相互赋值,数组不行,只能一个一个元素的赋值或者拷贝

2.存储方式

  • 数组:数组在内存中是连续存放的,开辟一块连续的内存空间。

    数组的存储空间,不是在静态区就数组在栈上

  • 指针:指针可以指向任意类型的数据。指针的类型说明了它所指向地址空间的内存。

    指针:由于指针本身就是一个变量,再加上它所存放的也是变量,所以指针的存储空间不能确定。

3. 求sizeof

  • 数组

    数组所占存储空间的内存:sizeof(数组名) 数组的大小:sizeof(数组名)/sizeof(数据类型)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <bits/stdc++.h>
    using namespace std;


    int main(){
    int a[] = {1, 2, 3, 4};
    cout << sizeof(a) << endl; // 16->sizeof(a)表示计算整个数组大小,一个int元素为4字节,4个元素,所以为16
    cout << sizeof(*a) << endl; // 4->对a解引用,就是首元素的大小,同上
    return 0;
    }
  • 指针:

    在32位平台下,无论指针的类型是什么,sizeof(指针名)都是4,在64位平台下,无论指针的类型是什么,sizeof(指针名)都是8。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <bits/stdc++.h>
    using namespace std;


    int main(){
    char *p = "abcde";
    cout << sizeof(p) << endl;
    return 0;
    }

4. 初始化