vlambda博客
学习文章列表

大牛带你学 | C语言的指针及相关运算符总体归纳

前言

在全国各个计算机考研学校中,不少自命题学校会考察“程序设计”这门课程,但是市场上的计算机考研资料却少有涉及C语言和程序设计的。为了弥补这个缺陷,大牛学长将会在接下来的一段时间中不断为大家带来程序设计中的重难点解析。


今天我们先来看一个C语言编程中同学们很熟悉但又不那么清晰的知识点—— 指针。如果同学们首次接触C,遭遇的第一个难题应该就是对于指针的理解,我相信读完这篇文章你就能够完全掌握指针这一概念,以及如何在C中去灵活的运用指针。


那么废话不多说

here we go~

大牛带你学 | C语言的指针及相关运算符总体归纳
预备知识

数据在计算机当中的存储形式



大牛带你学 | C语言的指针及相关运算符总体归纳


我们可以对这个存储空间做一系列操作。


C的变量在计算机当中的表示形式

我们知道形如int a = 10,这样的语句表明我们声明了一个int类型的变量,命名为a,赋值10,如果我们打印a,调用printf(a),会打印输出10。那么在实际的计算机当中是如何完成这个过程的呢?


大牛带你学 | C语言的指针及相关运算符总体归纳



看到这里,大家就已经拥有了学习指针,理解指针的所有知识了。


大牛带你学 | C语言的指针及相关运算符总体归纳
大牛带你学 | C语言的指针及相关运算符总体归纳
大牛带你学 | C语言的指针及相关运算符总体归纳
那么什么是指针呢?
大牛带你学 | C语言的指针及相关运算符总体归纳
大牛带你学 | C语言的指针及相关运算符总体归纳
大牛带你学 | C语言的指针及相关运算符总体归纳


指针

我们使用一个特殊的运算符ElemType*,在数据类型后面跟上一个 *,读作xx类型的指针。


大牛带你学 | C语言的指针及相关运算符总体归纳

大牛带你学 | C语言的指针及相关运算符总体归纳

对于图中的b,执行下面两句代码:

printf(b);

输出:2

printf(*b);

输出:10


一定要注意!



这时候,我们引进 & 这个操作符。(&操作符也是同学们经常不能完全理解的操作符)

还是对于上图中的b,执行这句代码:

printf(&b);
printf(&a);

输出:0和2




大牛带你学 | C语言的指针及相关运算符总体归纳


上图是执行以下代码之后的结果:

int a = 10;
int b = a;
int &c = a;

我们可以观察到b和c的区别,b虽然也是赋值为10,但是b和a指向了不同的存储单元,只是保存的值的内容相同。但是c是直接指向a的存储单元。引用表示的是使得这个变量和另一个变量共享存储单元。

进一步:

a = 20;

其实直接看是不是形如(数据类型) & 变量名就可以了。

特别注意,当函数的形参是引用类型的时候,实参不需要加上&符号,例如:

void swap(int &a, int &b){
int c = a;
a = b;
b = c;
}//交换两个数
int main(){
int a = 10;
int b = 20;
swap(a, b);
return 0;
}

执行之后,a = 20, b = 10

最后复习一下前面学到的*和&的用法。观察下面的代码:

int a = 10;
int *b = &a;
int c = *&a;
int &d = c;

执行后如图所示,a = 10, *b = 10, c = 10,d = 10,b = 3


大牛带你学 | C语言的指针及相关运算符总体归纳


今天是2020年8月16日

距离2021年考研还有125


生活本沉闷

跑起来才有风

大牛带你学 | C语言的指针及相关运算符总体归纳