标题:以物理方式秒懂c语言指针
只看楼主
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
结帖率:57.14%
已结贴  问题点数:20 回复次数:2 
以物理方式秒懂c语言指针
电脑有三种总线:数据总线Data(D),地址总线Adress(A),控制总线Contrl(C)
读取内存里的一个数据,先向地址总线传输地址,接着通过控制总线控制读或写,最后通过数据总线传输数据
所以
(重点: 可以把任何变量看做是一组常常的地址总线,指针也不例外)
举例:
c语言的一个变量B,可以理解为  Adress (地址总线)
int a; 可以看成 int  Adress(地址总线);
根据c语言指针的定义:
类型 * name; 如 int* ptrname; ptrname就是指向 int 类型的指针
换成上面的符号
就是   int*  Adress(地址总线);就是指向这个地址Adress.(根据反汇编可知 * 没啥意义,只是写给编译器看的)
实战:
char *p[]={ "aaa","bbb","ccc"};//暗含 Adress:p[0],p[1],[2],Data:"aaa","bbb","ccc"
char **cp[]={p+2,p+1,p};//  暗含 Adress : cp[0],cp[1],cp[2], p+2,p+1,p
char ***cpp=cp; // 非Data的都是Adress,它们就如拉电线那样互相缠绕
printf("%s",**++cpp);//答案????
printf("%s",(*(cpp[(-1)]))+1);//答案???

(附:C语言的复杂类型解释(别人的):变量遇到类型就说  什么类型的变量;如 int a; a是int类型的变量
                                    遇到*号  就说 是指向。。。。的指针
                                    遇到[]    就说是。。。。。的数组
                                    遇到()  就说是返回。。。。的函数
                                  举列子:
                                        int (**p[])();怎么读:
                                          第一步  p遇到 [] 先说 p  是。。。。。的数组
                                          第二步  p遇到*  -----p 是指向。。。。的指针的数组
                                          第三步  再遇到*     就说 p 是指向。。。的指针的指针的数组
                                           略)

[此贴子已经被作者于2021-7-17 00:27编辑过]

搜索更多相关主题的帖子: int 类型 指针 c语言 地址 
2021-07-16 23:57
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:10 
你所谓的地址总线 和 实际的地址总线不是一个意思?

https://zh.
2021-07-17 11:46
diycai
Rank: 8Rank: 8
等 级:贵宾
威 望:19
帖 子:147
专家分:895
注 册:2021-5-18
得分:10 
cpp[(-1)] 这是想崩溃的节奏,虽然不一定会崩溃。
2021-07-20 16:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506257-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.231136 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved