您的位置:首页 > 编程语言 > C语言/C++

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

2016-04-24 19:09 281 查看
大多数情况下,数组名的操作和指针的操作都相同,不过,两者并不是完全相同,下面就是一些区别:

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,因为数组名是常量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数组名 指针