C语言中令人头疼的指针(一)

C语言作为一种“古老”的程序语言,具有多种优点而一直沿用至今。而指针又是C语言中十分重要的一个部分,然而却十分不好理解,本文针对C语言中指针进行梳理理解。

什么是指针

要学习指针,首先要明确什么是指针,这是进一步理解和使用指针的前提。

指针是什么?

指针是一种变量

指针是一种特殊的变量

为什么特殊,因为其他的变量存储的都是一个数值,比如int存储的是整数值,double和float存储的是小数值,char存储的是字符(ASCII码值)。指针存储的是一个地址值,这个地址对应的变量就是指针所指向的变量

因此,指针变量是一种存储内存地址的变量,该内存地址所对应的变量就是指针变量所指向的变量

举个例子

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int main ()
{
    int var_runoob = 10;
    int *p;              // 定义指针变量
    p = &var_runoob;

   printf("var_runoob 变量的地址: %p\n", p);
   return 0;
}

上述程序执行的结果输出为

1
var_runoob 变量的地址: 0x7ffeeaae08d8

如何使用指针

根据刚刚得出的指针定义,不难发现指针可能会涉及的几种操作:定义指针变量,将变量地址赋给指针、访问指针中可用地址对应变量的值等。常用的运算符主要有两个:

  • “ * ” 运算符表示取地址对应的变量值
  • “ & ”运算符表是取地址,一般用于将某个变量的地址值取出赋给某指针或者在输入输出语句中使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main ()
{
   int  var = 20;   /* 实际变量的声明 */
   int  *ip;        /* 指针变量的声明 */

   ip = &var;  /* 在指针变量中存储 var 的地址 */

   printf("var 变量的地址: %p\n", &var  );

   /* 在指针变量中存储的地址 */
   printf("ip 变量存储的地址: %p\n", ip );

   /* 使用指针访问值 */
   printf("*ip 变量的值: %d\n", *ip );

   return 0;
}

上述代码的执行结果为

1
2
3
var 变量的地址: 0x7ffeeef168d8
ip 变量存储的地址: 0x7ffeeef168d8
*ip 变量的值: 20
1
C语言中在变量声明时,如果没有确切的地址可以复制,可以为变量赋一个NULL值。