C语言指针系列(2):指针变量大杂烩

C语言指针可谓是C语言的灵魂,无论是在C语言算法,还是在数据结构,他无处不在。指针,这对于老手如同家常便饭一样的操作,却在萌新面前如同一座万丈高山!

中国的伟人曾经说过:

世上无难事,只怕有心人!

C语言指针理解得透彻不透彻,全看你有没有下功夫,不过更多是要看有没有一个合适的引子,来启蒙你对他的认知。


指针变量类型有哪些?

众所周知,C语言中的基本变量类型有:整型变量,浮点型变量与字符型变量。

基本变量类型 指针变量类型
整型(int) 整型(int *)
浮点型(float) 浮点型(float *)
双精度(double) 双精度(double *)
字符型(char) 字符型(char *)

以上列举了最常用的几种指针变量类型,分别对应其所能存储的内存地址中值的类型。

例如:int *型指针变量只能存储值为int类型的变量的内存地址。 C语言指针讲究得就是门当户对,各位同学可别乱当月老牵红线……


C语言如何声明指针变量?

在C语言中,指针的一般声明格式如下:

[指针变量类型]   *[指针变量名];

如果要声明一个int* 型指针变量pt时,则有以下代码:

int *pt;
/*“*”必须与变量连在一起,否则非法*/

以此类推,其他类型指针变量声明不再一一赘述。


使用C语言指针

为了使用指针,c语言提供了两个特别的运算符——

  1. 取址运算符 &
  2. 取值运算符 *

在定义了一个指针变量后,只为其分配了相应的内存单元用于存放指针的值,而这个指针变量并没有指向某个特定的变量,因此在使用指针时,也需要将指针变量进行初始化。

因为指针变量存放的是变量的地址,因此对指针初始化就是将某个变量的地址赋给它。这个过程需要取址符&的帮助。

如下面的程序:

int x=5;
int *p=&x;
//将x的值赋予给p

也可以写成另一种形式:

int x=5,*p=&x;

上面两段代码效果与目地是一样的。

在输出p的值时要用到取值*:

printf("%d",*p);

深入学习

假设有以下程序代码:

int a=3;
int b=5;
int *p1=&a;
int *p2=&b;
p1=p2;

(1)声明两个整型变量,a的值为3,b的值为5

整型数值3
变量a
整型数值5
变量b

(2)将变量a,b的内存地址分别存储到p1与p2中

变量a
指针p1
变量b
指针p2

此时p1指向a,p2指向b

变量a 指针p1 把内存地址给p1 指针指向a 变量a 指针p1
变量b 指针p2 把内存地址给p2 指针指向b 变量b 指针p2

(3)将p1指向的地址修改为p2指向的地址

p1: F74EC7F7
p2: F74EC7F9

在这里大家可能会有些许迷惑,且听我道来。

我们在此要区分两个语句

p1 = p2;
这里没有取值符*,两者都为指针自身,将p1指向的内存地址修改为p2所指向的内存地址

*p1 = p2;
有取值符
,代表是将p1指向内存地址的值修改为p2指向内存地址的值

p1=p2释图

未执行前:

p1
F74EC7F7
p2
F74EC7F9

当执行该语句后:

F74EC7F7
p1
F74EC7F9
p2

*p1 = *p2释图

未执行前:

p1
F74EC7F7
3
p2
F74EC7F9
5

执行该条语句后:

p1
F74EC7F7
5
p2
F74EC7F9
5

                        ↓↓↓↓↓

p1
F74EC7F7
5
p2
F74EC7F9
5

现在大家明白了吗?没有没白没关系,还有第三章呢!

(未完待续…)

猜你喜欢

转载自blog.csdn.net/qq_49591922/article/details/107587670
今日推荐