加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_潮州站长网 (http://www.0768zz.com/)- 物联安全、建站、操作系统、云计算、数据迁移!
当前位置: 首页 > 教程 > 正文

C++指针与数组的联系和差异

发布时间:2021-12-11 15:07:51 所属栏目:教程 来源:互联网
导读:一、指针 1.可以在声明语句中初始化指针。在这种情况下,被初始化的是指针,而不是它指向的值。也就是说, int a = 4; int* p = a; 将p(而不是*p)的值设置为a。 2.在C++中创建指针时,计算机将分配用来存储指针的内存,但不会分配用来存储指针所指向的数

一、指针
 
1.可以在声明语句中初始化指针。在这种情况下,被初始化的是指针,而不是它指向的值。也就是说,
 
int a = 4;
 
int* p = &a;
 
将p(而不是*p)的值设置为&a。
 
2.在C++中创建指针时,计算机将分配用来存储指针的内存,但不会分配用来存储指针所指向的数据的内存。所以如下是不允许的:
 
int* b;
 
*b = 22;
 
注意:一定要在对指针应用解除应用操作符(*)之前,将指针初始化为一个确定的、适当的地址。这是关于使用指针的金科玉律。
 
3.不能简单的将整数赋给指针,例如下面的是不允许的:
 
int* p;
 
p= 0xC0000000;
 
从概念上看,指针和整数是截然不同的类型。整数是可以执行加、减、乘、除等运算的数字,而指针描述的是位置,将两个地址相乘没有任何意义。要将数字值作为地址来使用,应通过强制类型转换将数字转换为适当的地址类型。
 
int* p;
 
p = (int*)0xC0000000;
 
注意:p是int值的地址,并不意味着p本身的类型是int。例如,在使用DOS的IBM PC中的大型内存模式下,int类型是一个2个字节的值,而地址是一个4个字节的值。
 
二、指针和数组
 
首先声明一点:指针和数组基本等价的原因在于指针算术和C++内部处理数组的方式,C++将数组名解释为地址。
 
将指针变量和数组名加1后,其增加的值等于指向的类型占用的字节数。例如:
 
int a[5] = {1,2,3,4,5};
 
int* p = a;
 
C++将数组名解释为数组的第一个元素的首地址,即p = &a[0];
 
那么*(p+1)和*(a+1)是等效的,*(p+2)和*(a+2)也是等效的,同样用下标也是一样的。
 
区别:①可以修改指针的值,但是数组名是常量,其不能作为左值。例如:
 
p = p+1;可以,而a = a+1;不可以。
 
②对数组应用sizeof操作符得到是数组的长度,而对指针应用sizeof得到的是指针的长度,即使指针指向的是一个数组。例如:
 
sizeof(a)= 20;而sizeof(p)=4。
 
三、函数、数组和指针
 
注意:在函数原型或函数定义头文件的场合中(并且也只有这两种场合中),可以用int* a代替函数参量int a[ ]。因此下面的4种原型都是等价的:
 
int test(int *a,int n);
 
int test(int a[ ],int n);
 
int test(int *,int );
 
int test(int [ ],int );
 
原型允许省略名称,但是定义函数时,名称是不可以省略的。
 
无论在任何情况下,形式int *a都表示a是指向int的指针,形式int a[ ]也可以表示a是指向int 的指针,但只是在声明形式参量的时候才可以这样使用。使用第二种形式可以提醒用户a不仅指向一个int数值,而且它指向的这个int是一个数值中的元素。

(编辑:我爱制作网_潮州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读