c++ 指针的使用

指针是一个变量,其值为另一个变量的地址。就像其他变量一样,必须在使用指针存储其他变量地址之前,对其进行声明。

1、指针的声明

声明的一般形式为type *varname;它的意思是生命了一个名为varname的指针,它存储向type类型的变量的内存地址,它的作用就如同一个指向针一样,通过指针,我们可以找到它指向的量值。

2.取址运算符和取值运算符

使用指针之前,我们首先要了解一下取值运算符&,每一个变量都有一个内存地址,每一个内存地址都可以使用&变量名来访问该变量的存储地址。

同样,我们可以通过取值运算符*,来获取指针存储的内存地址所存储的值,形式为:*指针名称。

3、空指针Null

C++支持空指针。Null指针是一个定义在标准库中值为零的常量。

在声明变量是如果没有确切的地址可以赋值,为指针赋值为NULL是一个良好的编程习惯。

如需检查一个空指针,可以使用if(ptr)语句。

4、指针的算术运算

因为指针是一个数值表示的地址,因此,可以对指针执行++、--、+、-四种算术运算。每次增减其数据类型字节数。


问题:

1)为什么要给C++指针开辟空间?

我们可以看一段单链表插入结点的程序

错误示例如下图,由于我们没有给指针p指向的量开辟空间

int * p;
p的确有空间,正如一个整型变量需要占用空间一样,指针变量也要占用空间。
可关键在于这个空间存放的什么?
整型变量的空间中存放着一个整数,指针变量的空间中则存放一个地址!

任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。


正确做法,

malloc是什么意思呢,malloc实在程序动态运行的时候,在堆区heap中获取一块空间。

原型如下——

#define size_t unsigned int
void * malloc(size_t size);

你传进去个size,就可以获取size个字节的空间,然后返回一个void *指针,这个指针指向了这块新分配的空间
(也就是这个指针中的地址值为这块空间的首地址)

int * p = (int *)malloc(sizeof(int));

如上是动态创建一个int变量的程序。

这样,p中存放了malloc分配的空间的首地址,继而利用这个首地址访问malloc分配的空间。


2)free指针

指针本身还在,只是它所指的内容给释放了,变成了野指针,此时不能再对它做解引用,若需要使用该指针可以给它重新分配内存。还有,指针free后,最好将它赋为NULL

1)C++指针的定义

格式:ElemType *name;表示这是一个名字为name,指向一个ElemType类型变量的指针。


2)C++指针的赋值

C++指针的值是指向的存储变量的地址,

例如:

int a = 5;

int *p=&a;//p指向a


int *p = null;

int a[5];

p =a;


3)C++指针本身的类型

4)C++指针所指向值

参见:http://www.cnblogs.com/ggjucheng/archive/2011/12/13/2286391.html


5)结构体中的指针

6)指针作为函数参数

[cpp]  view plain  copy
  1. #include <iostream>  
  2. using namespace std;  
  3. void swap(int *a,int *b)//这里的*表示参数是指针类型的参数  
  4. {  
  5.   int tmp;  
  6.   tmp = *a;//这里的*表示取指针a所指向地址的值  
  7.   *a = *b;  
  8.   *b = tmp;  
  9.   cout<<*a<<endl;  
  10.   cout<<*b<<endl;  
  11. }  
  12. int main()  
  13. {  
  14.   int a = 1;  
  15.   int b = 2;  
  16.   int *p1 = &a;  
  17.   int *p2 = &b;  
  18.   swap(p1,p2);//p1,p2本身是指针  
  19. }  

结果为:

猜你喜欢

转载自blog.csdn.net/xuefujin/article/details/79701295