注册 登录
编程论坛 C语言论坛

以物理方式秒懂c语言指针

do8do8do8 发布于 2021-07-16 23:57, 1391 次点击
电脑有三种总线:数据总线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编辑过]

2 回复
#2
lin51616782021-07-17 11:46
你所谓的地址总线 和 实际的地址总线不是一个意思?
#3
diycai2021-07-20 16:21
cpp[(-1)] 这是想崩溃的节奏,虽然不一定会崩溃。
1