c语言指针p1

  • Post author:
  • Post category:其他


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

中国的伟人曾经说过:

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

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

指针变量类型有哪些?

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

基本变量类型

指针变量类型

整型(int)

整型(int *)

浮点型(float)

浮点型(float *)

双精度(double)

双精度(double *)

字符型(char)

字符型(char *)

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

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

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

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

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

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

int *pt;

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

使用C语言指针

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

取址运算符 &

取值运算符 *

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

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

如下面的程序:

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

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

(未完待续…)