今天,我们就来看一个指标的范例,测试一下对於指标的概念,是不是真的熟悉~
看一下下面的程序码:
#include<stdio.h>
int main(){
int data[] = {10, 21, 35, 47, 51};
int *p[] = {data, data+1, data+2, data+3, data+4};
int **p_p = p;
printf("*p[1] = %d\n\n", *p[1]);
printf("**p_p = %d\n\n", **p_p);
printf("*(*p_p+1) = %d\n\n", *(*p_p+1));
printf("*(*(p_p+1)+2) = %d\n\n", *(*(p_p+1)+2));
return 0;
}
不知道大家会不会跟我一样,看到两颗星星 **
就开始害怕,想说这到底是甚麽东西?
但请仔细思考、并复习一下前三天讲的,就会发现没有那麽难的!
有答案了吗?让我们先看看输出结果!
我们把图画出来,再解释:
为了方便说明,以下粗体字代表的是位址,且我们用上面那张图结合程序来说明:
data[]
,并在里面放五笔资料。再宣告指标阵列 p[]
,这个指标阵列里面的资料放的是 data[]
五笔资料的位址。p_p
,里面放的是指标 p
的位址(p)。*p[1]
,p[1]
里面放的位址是 data+1 ,我们对 data+1 取值,所以输出 21。**p_p
,也就是在 p
位址放的位址(data)的值,所以输出 10。*(*p_p+1)
,因为*p_p
是 p
位址放的位址(data),然後 data+1 取值,所以印出 21。*(*(p_p+1)+2)
,*(p_p+1)
等於 p+1
位址放的位址(data+1),然後我们把他加 2 後再取值,所以输出是 47。不知道大家的脑袋有没有觉得绕来绕去的感觉~如果以上内容都非常清楚的话,那恭喜你!基本的指标概念应该已经都学起来了!但是,指标的内容蛮容易忘记的,所以记得要常常复习喔~
明天,让我们来讲讲新的东西 - 函式!
>>: Day27 - 在 Next.js 如何正确地使用 dynamic import
今天开始正式进入系列文的最後一个章节 - Framework, Architecture and ...
专案运行过程,如何将进行方向维持着,不会像YAMAHA一样乱点技能树呢? 这就需要「时时勤拂拭,莫使...
封装 先请 wiki 大大出来讲个话: 在物件导向程序设计方法中,封装(英语:Encapsulati...
今天进度 : unix - What is the difference between a sym...
AWS Certified Solution Architect Associate之旅的第一站,我...