指标可以进行许多运算,让我们看看下面的例子:
#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
其实下载流程非常的简单,只需要搜寻MySQL下载 MySQL community Server 和M...
参加心得 因为一定要连续三十天都发文,所以铁人赛会让自己不懒惰的学完自己一开始订定的每个目标,之後的...
TOWS是什麽? TOWS 分析是经典商业工具 — SWOT 分析的变体,由 Heinz Weihr...
安装说明 安装环境 Angualr 11.2.6 node.js v14.17.0 建立一个 An...
Classification - Predict category or class Train r...