16.指针变量那点事.md 2.3 KB
Newer Older
极客江南's avatar
极客江南 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
## 什么是指针变量

- 在C语言中,允许用一个变量来存放其它变量的地址, 这种专门用于存储其它变量地址的变量, 我们称之为指针变量
  ![](https://img-blog.csdnimg.cn/img_convert/02442ae9685e56146470369e56ca18ab.png)
- 示例:

```
    int age;// 定义一个普通变量
    num = 10;
    int *pnAge; // 定义一个指针变量
    pnAge = &age;
```

![](https://img-blog.csdnimg.cn/img_convert/8b7b4d0976ad6e192e3ad6e26282fa8a.png)

## 定义指针变量的格式

- 指针变量的定义包括两个内容:

+ 指针类型说明,即定义变量为一个指针变量;
+ 指针变量名;
  ![](https://img-blog.csdnimg.cn/img_convert/c051703dcae8535c264ef47c20881b53.png)

- 示例:

```c
char ch = 'a';
char *p; // 一个用于指向字符型变量的指针
p = &ch;  
int num = 666;
int *q; // 一个用于指向整型变量的指针
q = #  
```

>+ 其中,*表示这是一个指针变量
>+ 变量名即为定义的指针变量名
>+ 类型说明符表示本指针变量所指向的变量的数据类型

---

## 指针变量的初始化方法

- 指针变量初始化的方法有两种:定义的同时进行初始化和先定义后初始化

+ 定义的同时进行初始化

```c
int a = 5;
int *p = &a;
```

-   先定义后初始化

```c
int a = 5;
int *p;
p=&a;
```

- 把指针初始化为NULL

```c
int *p=NULL;
int *q=0;
```

- 不合法的初始化:

+ 指针变量只能存储地址, 不能存储其它类型

```c
int *p;
p =  250; // 错误写法
```

-  给指针变量赋值时,指针变量前不能再加“*

```c
int *p;
*p=&a; //错误写法
```

- 注意点:

+  多个指针变量可以指向同一个地址
   ![](https://img-blog.csdnimg.cn/img_convert/d4c9b29d8ddb808d1a12252fdcdf538a.png)

- 指针的指向是可以改变的

```c
int a = 5;
int *p = &a;
int b = 10;
p = &b; // 修改指针指向
```

- 指针没有初始化里面是一个垃圾值,这时候我们这是一个野指针

+ 野指针可能会导致程序崩溃
+ 野指针访问你不该访问数据
+ 所以指针必须初始化才可以访问其所指向存储区域
  ![](https://img-blog.csdnimg.cn/img_convert/e38cdad483acddca8cfcd85e7ac0be78.png)

## 

最后,如果有任何疑问,请加微信 **leader_fengy** 拉你进学习交流群。

开源不易,码字不易,如果觉得有价值,欢迎分享支持。