我说C/C++——初识指针

一、概述

指针是一个变量,其值为另一个变量的地址,是哪个变量的地址呢?是指针所指向变量的地址。

使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针(写入地址值)、访问指针变量中可用地址的值(读出地址值)。

二、代码

2.1、定义一个指针变量

定义指针变量时,要注意一点,比如int *ip, 

  类型名 变量名 理解 正确与否
int *ip; int * ip int *这一类型声明了一个名为ip的变量 正确
int *ip int类型声明了一个名为*ip的变量 错误
小结:这是初学者容易犯的错误,因为"int *ip"中,*与int之间有空格,*与ip之间没有空格,新手容易将*认为是变量名的一部分,认为*ip是整个变量名。这是错误的,ip是变量名,int * 才是类型名。

有图,我将"int *" "double *" "float *" "char *" 用方框号框起来,旨在说明它们是一个整体,一起组成类型名,这是一个指针类型名。

2.2、把变量地址赋值给指针(写入地址值)

定义指针变量后,就要给指针变量赋值了,未赋值的指针变量是随机值,这是非常危险的。

如何给指针变量赋值?

首先要明白指针变量的值是什么?指针变量的值实际是地址,记住,

重点,很重要:所有指针变量的值都是地址。所有的指针变量都是为实际变量保存地址的,不同类型的指针变量只是保存不同实际类型变量的指针而已。int * 保存int类型变量地址,double *保存double类型变量地址,float * 保存float类型变量地址,char *保存char类型变量地址,虽然保存着不同类型变量地址,但都是保存地址,都是保存十六进制的内存地址。

好了开始看代码:

#include <iostream>

using namespace std;

int main()
{
   int  *ip;        // 指针变量的声明   接着使用刚才的int *ip,int*类型变量ip.
   int  var = 20;   // 实际变量的声明   因为是int *类型指针变量,所以自然用int类型的实际变量


   ip = &var;       // 在指针变量中存储 var 的地址
   //这里,注意,同上ip是指针类型变量名,又因为指针类型变量是用来存放十六进制的地址的,
   //所以这里将实际变量var的地址赋值给指针变量ip,
   //注意:实际变量中使用&取到地址   这里&var

    return 0;
}

2.3、访问指针变量中可用地址的值(读出地址值)。

既然指针变量中存放的是地址,可以直接访问指针变量名输出地址吗?答案是肯定的

代码——直接访问指针变量名输出地址:

#include <iostream>

using namespace std;

int main()
{
   int  *ip;        // 指针变量的声明   接着使用刚才的int *ip,int*类型变量ip.
   int  var = 20;   // 实际变量的声明   因为是int *类型指针变量,所以自然用int类型的实际变量


   ip = &var;       // 在指针变量中存储 var 的地址
   //这里,注意,同上ip是指针类型变量名,又因为指针类型变量是用来存放十六进制的地址的,
   //所以这里将实际变量var的地址赋值给指针变量ip,
   //注意:实际变量中使用&取到地址   这里&var

   cout << "输出实际变量值: ";
   cout << var << endl;    //输出实际变量值


   cout << "输出实际变量地址: ";
   cout << ip << endl;    //输出实际变量地址
   
   return 0;
}

输出:

输出实际变量值: 20
输出实际变量地址: 0x6afee8

所有指针变量中存放的都是地址,但是指针变量在读出的时候不仅可以读出地址,还可以通过地址找到地址所在内容并输出,且看下面代码。

代码——"*指针变量名"得到指针所指地址的内容:

#include <iostream>

using namespace std;

int main()
{
   int  *ip;        // 指针变量的声明   接着使用刚才的int *ip,int*类型变量ip.
   int  var = 20;   // 实际变量的声明   因为是int *类型指针变量,所以自然用int类型的实际变量


   ip = &var;       // 在指针变量中存储 var 的地址
   //这里,注意,同上ip是指针类型变量名,又因为指针类型变量是用来存放十六进制的地址的,
   //所以这里将实际变量var的地址赋值给指针变量ip,
   //注意:实际变量中使用&取到地址   这里&var

   cout << "输出实际变量值: ";
   cout << var << endl;    //输出实际变量值


   cout << "输出实际变量地址: ";
   cout << ip << endl;    //输出实际变量地址


   cout << "输出实际变量值: ";
   cout << *ip << endl;    //输出实际变量值   使用指针变量通过地址找到实际变量值
   //这里注意   指针变量ip中存放的是实际变量var的十六进制的地址,指针变量可以用"*变量名"获取指针变量所指内存地址的内容

    return 0;
}

输出:

输出实际变量值: 20
输出实际变量地址: 0x6afee8
输出实际变量值: 20

三、小结

      本节为初识指针,介绍了定义一个指针变量、把变量地址赋值给指针(写入地址值)、访问指针变量中可用地址的值(读出地址值),三个最基本的操作。

天天打码,天天进步!

发布了177 篇原创文章 · 获赞 31 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_36963950/article/details/103285591