【Day 26】指标介绍(下)

指标可以进行许多运算,让我们看看下面的例子:

#include<stdio.h>
int main(){
	int *p;
	int data[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	p = &data[6];
	printf("p存放的位址: %p\n\n", p);
	printf("p存放的位址的值: %d\n\n", *p);
	p ++;
	printf("p存放的位址: %p\n\n", p);
	printf("p存放的位址的值: %d\n\n", *p);
	return 0;
} 

输出结果:

程序解说:

  • 首先,我们先宣告一个指标变数 p 以及长度为 10 并已经存放数值的阵列
  • data[6] 的位址放入指标变数 p 中(指标指向 data[6]
  • 输出指标变数 p 里面存放的位址(也就是data[6] 的位址)以及存放位址的值
  • 指标变数 p 加一,代表位址移动了 4 bytes,因为我们宣告的是 int
  • 输出指标变数 p 里面存放的位址(现在是data[7] 的位址)以及存放位址的值

由以上例子也能验证我们在阵列单元讲到的-阵列使用连续记忆体位址

指标阵列

如果有一行宣告程序码长这样:
int *ptr[3];
因为 [] 的优先顺序大於 *,表示这个阵列元素(有三个),都指向某个特定的资料型态(int),我们称他为指标阵列。

来看一段程序码:

#include<stdio.h>
int main(){
	int data[3][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};
	int *p[3] = {data[0], data[1], data[2]};	
	printf("%d %d %d ", **p, **(p+1), **(p+2));
	return 0;
} 

以下是输出结果:

程序说明:

  • 首先,先宣告一个二维阵列 data,其大小是 3*4,并宣告一个指标阵列,指向 data 每一列开头。
  • 输出阵列指标中所存放位址的值

我们可以看到,把阵列指标 p 印出後,会发现里面放的位址指向的值,是二维阵列每一列开头!

画成图会长这样:

以前老师上课时有跟我们说:在阵列与指标这里,*[] 在某种意义上是可以当成一样的意思。
例如:在上面的程序码中,**p 换成 *p[0]是一样的。

指标的基本概念大致上讲到这边,明天,我们来看一个有一点点小困难的例子,希望透过那个例子,可以让我们更了解指标!


<<:  JavaScript学习日记 : Day29 - import & export

>>:  [从0到1] C#小乳牛 练成基础程序逻辑 Day 26 - String操纵术III

[Day 16] MySQL下载注意事项(Mac版)

其实下载流程非常的简单,只需要搜寻MySQL下载 MySQL community Server 和M...

{Day30}参加心得

参加心得 因为一定要连续三十天都发文,所以铁人赛会让自己不懒惰的学完自己一开始订定的每个目标,之後的...

SWOT和TOWS分析有什麽区别?

TOWS是什麽? TOWS 分析是经典商业工具 — SWOT 分析的变体,由 Heinz Weihr...

TailwindCSS 从零开始 - 如何在 Angular 中使用 TailwindCSS

安装说明 安装环境 Angualr 11.2.6 node.js v14.17.0 建立一个 An...

Day 08 Create a classification model with Azure Machine Learning designer

Classification - Predict category or class Train r...