关于c:C语言的灵魂指针

4次阅读

共计 2273 个字符,预计需要花费 6 分钟才能阅读完成。

本文首发自「慕课网」,想理解更多 IT 干货内容,程序员圈内热闻,欢送关注 ” 慕课网 ”!

作者:精慕门 1289550| 慕课网讲师

C 语言中的指针

C 语言的指针经常被人们认为是 C 语言中的灵魂所在,能够实现很多高难度的操作。然而更多的人感觉 C 语言的指针的存在如同噩梦个别,因为稍不留神,就会引起灾难性的结果。
不论你是不是喜爱 C 语言中的指针,咱们都要学习这种看起来很神奇的货色。因为指针这个概念不是 C 语言独创的,而是苏联的计算机科学家独创的。

1. 什么是指针?

指针是什么?这是来自灵魂的拷问。其实指针也是一种变量。咱们之前也说过。只不过存储的是另外一个变量的地址。变量地址是变量在内存中存储的地位索引。

`int *a;

int b=5;

a = &b;

这里咱们定义了一个整数类型的指针 a,能够看出指针的定义与变量的申明是统一的,只不过须要在变量明前加上一个额定的字符 *

因为指针中存储的应该是变量的地址,因而咱们在赋值的时候须要取得变量的地址,而不是变量自身所存储的数值。这里咱们采纳的 & 来获取变量的地址。将获取到的地址赋值给指针变量。

要是想应用指针中存储地址中所存储的值,那么就须要在指针变量名前加 * 来获取相应地址中存储的值。

2. 示例程序

#include <stdio.h>

int main()
{
    int *a, b = 100, *c;
    printf("a value = %p, a address = %p, a point value = %d\n", a, &a, *a);
    printf("b value = %d, b address = %p\n", b, &b);
    printf("c value = %p, c address = %p, c point value = %d\n", c, &c, *c);
    a = &b;
    printf("a value = %p, a address = %p, a point value = %d\n", a, &a, *a);
    c = a;
    printf("c value = %p, c address = %p, c point value = %d\n", c, &c, *c);
    printf("b value = %d, b address = %p\n", b, &b);

    return 0;
}

运行后果:

示例中的运行后果中的十六进制所示意的地址每台机器都会不太一样,甚至每次运行都会发生变化。因为操作系统每次为零碎调配的内存都不太一样。

a value = 0x7fffaf0005a0, a address = 0x7fffd2942a28, a point value = -1991643855
b value = 100, b address = 0x7fffd2942a24
c value = 0x7fffd2942b20, c address = 0x7fffd2942a30, c point value = 1
a value = 0x7fffd2942a24, a address = 0x7fffd2942a28, a point value = 100
c value = 0x7fffd2942a24, c address = 0x7fffd2942a30, c point value = 100
b value = 100, b address = 0x7fffd2942a24

示例程序中申明了一个整数类型的指针 a,同时还申明并初始化了一个整数类型的变量 b

咱们首先展现了此时此刻指针变量 a 中存储的值,也就是一个内存地址,这个地址为 0x7fffaf0005a0,同时 a 变量自身的地址为 0x7fffd2942a28,此时其存储的内存地址中所存储的值为 -1991643855。这里须要阐明的是,a 变量此时还没有初始化,没有赋值,外面存储的数值是随机的,所以其代表的值也是随机的,必须在赋值当前能力应用。这点和所有的变量的应用是统一的。

变量 b 的存储的数值为 100,其内存的地址为 0x7fffd2942a24

指针变量 c 中存储的数值是地址 0x7fffd2942b20,其自身的地址是 0x7fffd2942a30,外面存储的地址中存储的数值为 1

而后咱们进行了一次赋值的操作。这里的赋值操作,就是将变量 b 的地址赋给了变量 a

这个时候你会发现变量 a 中存储的数值变成了变量 b 的地址,而变量 a 本人的地址是没有发生变化的,而变量 a 中所存储的地址中的值也编程了变量 b 中所存储的值 100

指针之间的赋值就比拟间接,和一般变量的赋值是一样的,只有间接赋值就能够了。

上面的表格展现了这一系列的变动

初始状态

变量名 变量中数值 地址 指针地址中数值
a 0x7fffaf0005a0 0x7fffd2942a28 -1991643855
b 100 0x7fffd2942a24
c 0x7fffd2942b20 0x7fffd2942a30 1

赋值后

变量名 变量中数值 地址
a 0x7fffd2942a24 0x7fffd2942a28
b 100 0x7fffd2942a24
c 0x7fffd2942a24 0x7fffd2942a30

结尾

指针作为 C 语言中绝对比拟形象的局部,是很多初学者最难超越的局部。然而请大家放松情绪。因为指针其实和一般变量没有什么实质的区别,其实叫做指针变量更为贴切一点。指针是一个变量,外面存储的内容是另外一个变量的内存地址。每个变量都会有地址,包含指针变量本人自身也是有地址存在的。咱们在赋值的时候是将别的变量通过变量名取得的该变量的地址存储到指针变量里,而后获取这个被存储到指针变量里的地址的数值,或者持续将该变量的地址赋值给另外一个指针变量。指针变量的存在只是一个变量的赋值,切记了解为玄学。

欢送关注「慕课网」帐号,咱们会始终保持内容原创,提供 IT 圈优质内容,分享干货常识,大家一起独特成长吧!

本文原创公布于慕课网,转载请注明出处,谢谢合作

正文完
 0