C++数组名和指针的区别

大多数情况下,数组名的操作和指针的操作都相同,不过,两者并不是完全相同,下面就是一些区别:

1. 数组名是常量,指针是变量

数组名不能进行运算,而指针可以进行运算,如

int *p;
p++;
2. sizeof执行的结果不同

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    const int size = 50;
    int sizeTest[size];
    int* pTest = new int [30];

    printf("Length of array sizeTest is %lu\n", sizeof(sizeTest));
    printf("Length of int is %lu\n", sizeof(int));
    printf("Length of pointer pTest is %lu\n", sizeof(pTest));
    pTest = sizeTest;
    printf("Length of pointer pTest is %lu\n", sizeof(pTest));
}

运行结果如下,从中可以看出sizeof针对指针得到的是指针类型的字节长度,对数组名得到的是数组的长度,正因如此,如果函数的形参是个数组,实参传递数组名的话,其实传递的是该实参数组第一个元素的地址,则在 函数中对该数组执行sizeof无法得到该数组的长度,这点需要特别注意。

C++数组名和指针的区别_第1张图片

3. 取地址的结果不同

数组名虽然代表数组第一个元素的地址,但是对数组名取地址,得到的是长度和数组内存长度相等的内存块地址,每次加1时,内存地址将增加对应数组的内存长度,如

int arr[50];
int **p = &arr;//&arr + 1时,内存地址增加200,而不是增加4;&arr[0] + 1时,内存地址增加4; arr不能加1,因为数组名是常量

你可能感兴趣的:(指针,数组名)