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

来源:互联网 发布:上海万户网络怎么样 编辑:程序博客网 时间:2024/06/07 09:55

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

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无法得到该数组的长度,这点需要特别注意。


3. 取地址的结果不同

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

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

0 0
原创粉丝点击