C++数组名和指针的区别
2016-04-24 19:09
281 查看
大多数情况下,数组名的操作和指针的操作都相同,不过,两者并不是完全相同,下面就是一些区别:
1. 数组名是常量,指针是变量
数组名不能进行运算,而指针可以进行运算,如
运行结果如下,从中可以看出sizeof针对指针得到的是指针类型的字节长度,对数组名得到的是数组的长度,正因如此,如果函数的形参是个数组,实参传递数组名的话,其实传递的是该实参数组第一个元素的地址,则在函数中对该数组执行sizeof无法得到该数组的长度,这点需要特别注意。
3. 取地址的结果不同
数组名虽然代表数组第一个元素的地址,但是对数组名取地址,得到的是长度和数组内存长度相等的内存块地址,每次加1时,内存地址将增加对应数组的内存长度,如
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,因为数组名是常量
相关文章推荐
- 关于指针的一些事情
- C# Pointer指针应用实例简述
- C++智能指针实例详解
- C++指向函数的指针实例解析
- 关于c语言指针的两处小tip分享
- 浅析iterator与指针的区别
- 探讨C++中数组名与指针的用法比较分析
- C++编程指向成员的指针以及this指针的基本使用指南
- 详解C++中的指针、数组指针与函数指针
- C++中字符串以及数组和指针的互相使用讲解
- C语言安全之数组长度与指针实例解析
- C++中指向对象的常指针与指向常对象的指针详解
- 指向变量的常指针与指向常变量的指针详细解析
- C#通过指针实现快速拷贝的方法
- php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
- C#通过指针读取文件的方法
- C语言指针学习经验总结浅谈
- C++交换指针实例
- C/C++中指针和引用之相关问题深入研究
- C语言学习---内存/指针