这是我的代码,IDE是DEV C++ 11
#include<iostream>
using namespace std;
class A{
public:
int a=15;
};
class B:public A
{
};
int main(){
int A::*ptr=&B::a; //OK
int B::*ptr1=&A::a; //why?
int B::A::*ptr2=&B::a;//why?
int B::A::*ptr3=&A::a; //why?
}
Run Code Online (Sandbox Code Playgroud)
我读过Programming Languages - C++,我知道&B::ais 的类型int A::*,但我不明白为什么接下来的三行会通过编译.而对我来说最奇怪的是它的语法 int B::A::*,这是什么意思?我只是一个新人C/C++,所以请容忍我的奇怪问题.
这是我的代码:
section .data
digit db 0,10
section .text
global _start
_start:
call _printRAXDigit
mov rax, 60
mov rdx, 0
syscall
_printRAXDigit:
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 2
syscall
ret
Run Code Online (Sandbox Code Playgroud)
我有一个关于之间的差异问题[digit]和digit.
我已经知道标签(如代码中的数字)代表数据的内存地址,而运算符"[]"就像取消引用指针一样,因此它会将标签指向的值加载到目标.
例如,mov rax, [digit] 将0抛出到rax寄存器,因为数字指向数据的第一个元素(在本例中为整数0).
但是,在我的代码中,它在我写入时起作用mov [digit], al,这意味着"将存储的值加载al到内存地址数字 ",但我不知道为什么在这种情况下我们应该使用"[]".第一个参数mov必须是目的地(如寄存器或内存地址),所以我认为它应该是mov digit, al而不是mov [digit], al.对我来说,为什么我们使用一个值从另一个地方获取值而不是使用内存地址来获取值是没有意义的.
这就是我的全部问题.请给我任何关于我的想法错误或对我的标签概念的任何更正的回应.