C++指针声明、初始化、基本操作和参数传递

这一系列文章用于记录技术小白在学习道路上遇到的那些坑,在刚开始接触C系列的编程语言的时候,相信很多人都对指针感到头疼,笔者也一样,第一次的从入门到放弃就出现在这里,时隔很久之后,决定好好学习一下,明知山有虎偏向虎山行。

1、声明和初始化指针

指针是一种变量,其值是一个内存地址。 形式如下:

 Type * pointerVariable;
 Type * pointerVariable = address;

Type是任意类型、address是给定Type类型对象的地址。
注意:*号必须在标识符前面,address必须是和指针类型相同的对象的地址,指针可以被赋值为0,称为空地址,也可看作零指针变量。

int main()
{
  int i = 10,
      j = 20;  //定义整数
  int * iPtr,
      * jPtr;  //定义指针变量用于存放整数的地址
  iPtr = &i;
  jPtr = &j;   //将i的地址赋值给指针变量iPtr,& 是取地址运算符
}

2、基本指针操作

(一)去引用和间接引用
指针变量只存储内存地址,通过指针访问内存地址的内容需要使用 * 号去引用。
* pointerVariable
在对指针去引用时指针不能为空,且指向内存一个特定位置,避免悬空指针问题。
在上面的示例代码中,iPtr 存放的是 i 的内存地址,那么 * iPtr 就相当于 i 的一个别名。可以通过引用 * iPtr 来间接访问 i 的内容。
(二)赋值
指针变量 jPtr 被赋予同一类型的指针变量 iPtr 的值之后,两者都指向了同一内存地址,即 i 的内存地址,这时对 * iPtr 和 * jPtr 进行操作都将改变 i 的内容。
(三)比较
用关系运算符比较同一类型的两个指针,比如判断 iPtr 和 jPtr 是否指向同一地址。

3、参数传递

下面是一个交换两个 int 型变量值的C++函数:

void swap(int & first , int & second)
{
 int temp = first;
 first = second;
 second = temp;
}

调用函数则是 swap(x ,y)
翻译成C语言如下所示:

void swap(int * first , int * second)
{
  int temp = * first;
  * first = * second;
  * second = temp;
}

调用函数则是 swap(&x ,&y)
这是引用传递,first 和 second 都相当于一个别名。一个引用形参被翻译成一个指针变量,相应的实参被翻译成这个实参的地址。当在函数中被使用时,指针形参被自动地去引用。从而产生对应实参的别名。
指针也可以作为实参传递给函数,与之对应的形参可以是值形参或者引用形参,但是类型必须一致。

你可能感兴趣的:(数据结构)