【从零开始的 C 语言笔记】第十一篇-指标

不怎么重要的前言

上一篇我们总结了scanf的观念,也出了一个小小的作业希望让大家熟悉一下scanf & printf的使用。

接下来我们来谈一下什么是指标、scanf用到的「&」是什么意思!


上次的小作业--数字加总小程式

方法一、

#include <stdio.h>int main(){    int data1, data2;    printf("plz input 2 int: ");    scanf("%d%d", &data1, &data2);    printf("ans: %d\n", data1 + data2);    return 0;}

方法二、

#include <stdio.h>int main(){    int data1, data2;    printf("plz input 2 int: ");    scanf("%d%d", &data1, &data2);    int ans = data1 + data2;    printf("ans: %d\n", ans);    return 0;}

只是稍微列两种写法,不一定只能这样写,只要能写的出结果都是好程式!而这两种方法只差在方法二多用一个变数,去运算、储存结果并输出。


资料存放在哪里?

就像是人会有居住地址一样,资料既然被存放在记忆体,那它也会有一个记忆体地址,来代表它被存放的位置。

http://img2.58codes.com/2024/20142565EOrGCDktgl.png

相对的每一个变数被宣告的当下,记忆体也会分配给它一个地址来储存资料,只是我们通常使用时只要呼叫变数(诱惑世说使用变数,变数名称像是人的姓名),就可以直接对资料内容做运算、输出了,因为有了变数名称我们就能省去很多不必要的麻烦。

对应关係有点像是这样:
http://img2.58codes.com/2024/20142565VBreb6hdka.png

从第九篇的scanf时,我们就有用到「&」来取址,让scanf可以把使用者输入的资料存入地址中,同样的方法我们使用printf来取得变数地址,输出看看变数存放的地址长什么样子:

#include <stdio.h>int main(){    int data = 5;    printf("data: %d\n", data);    printf("where is data: %p\n", &data);    return 0;}

http://img2.58codes.com/2024/20142565X9OVxhqIWt.png


指标是什么?

前面我们有提到当我们宣告一个变数,记忆体会分配给它一个地址,而这个地址我们称它指标(Pointer),而如果我们特别宣告一个变数用来储存指标(变数地址),而那个变数就被称为--「指标变数」。

我们先来简单看一段程式码:

#include <stdio.h>int main(){    int data = 5;    printf("data: %d\n", data);    printf("where is data: %p\n\n", &data);    int* pointer;    pointer = &data;    printf("pointer: %p\n", pointer);    printf("where is pointer: %p\n", &pointer);    return 0;}

http://img2.58codes.com/2024/20142565U8naA6wOuW.png

从上面这段程式码我们可以知道,指标变数的资料内容就是指标(变数地址),而指标变数本身也会拥有自己的变数地址,跟一般变数的差别只在于它是用来储存变数地址的,现阶段先知道有这样的东西、怎么使用就好,未来我们会提到为什么会需要这样的东西。


正式使用指标

指标的相关语法有两种:
(1) 「&」取址:可用于把其他变数地址存入指标变数时,或单纯取得变数地址。
#include <stdio.h>int main(){    int data = 5;    int* pointer = &data;    printf("data: %d\n", data);    printf("where is data: %p\n", &data);    printf("------\n");    printf("pointer: %p\n", pointer);    printf("where is pointer: %p\n", &pointer);    return 0;}

http://img2.58codes.com/2024/20142565IpUPqqL3zh.png

(2) 「*」取指标内存放内容:可用于修改其指标所代表变数之资料内容

#include <stdio.h>int main(){    int data = 5;    int* pointer = &data;    printf("data: %d\n", data);    printf("where is data: %p\n", &data);    printf("pointer: %p\n", pointer);    printf("where is pointer: %p\n", &pointer);    printf("------\n");    *pointer = 777;    printf("data: %d\n", data);    printf("where is data: %p\n", &data);    printf("pointer: %p\n", pointer);    printf("where is pointer: %p\n", &pointer);    return 0;}

http://img2.58codes.com/2024/201425656flX6eHOkG.png

宣告指标时怎么做:
(1) 在资料型态后
int* pointer;

(2) 在变数名称前

int *pointer;

而指标变数的资料型态会代表所指向的变数的资料型态,如以下:

float data = 3.14;float* poiner = &data;

http://img2.58codes.com/2024/20142565qi77dbFe0C.png


指标小结

宣告与取值时
http://img2.58codes.com/2024/20142565n28opgjsjV.png

利用指标变数修改其他变数之值时
http://img2.58codes.com/2024/201425659qEmwhFKQX.png

只要是变数都有自己的变数地址,虽然指标变数的资料内容是指标(变数地址),但其本身也有自己的变数地址。
http://img2.58codes.com/2024/20142565Cse3EilXMJ.png

如果觉得这种叙述方法比较难理解,可以参考以下资料:

指标C语言: 超好懂的指标,初学者请进~指标与地址

辛苦看到这里的你,今天的内容可能比较难以理解,虽然已经尽可能地解释了,不过还是不清楚的话可以参考其他资料,也许会找到适合自己了解内容的说明方法。

下一篇我们来介绍Math函式库是什么吧!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章