对于char d,执行cout <<&d时得到奇怪的输出

时间:2019-02-04 14:07:04

标签: c++ char cout ampersand addressof

我刚刚开始学习c ++,但我并不太了解,为什么当我退出&d时,它显示的字符与我已经显示过的字符一样多+加1次。 因此它在这里显示了3倍字符“ d” ...作为该行
cout <<&d << endl;

如果有人可以用简单的话解释我的原因,我将感谢他。 如果问题很愚蠢,我感到抱歉。

public void Check(){
    final String phone=username.getText().toString();
    ref = database.getReference().child("Users");
    Query query=ref.orderByChild("phone").equalTo(phone);
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot data:dataSnapshot.getChildren()){
                if(data.child(name).exists()){
                    Log.i("Present","Present");
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });  

1 个答案:

答案 0 :(得分:2)

那是因为&(在此上下文中)是地址运算符。

编辑:正如@MSalters所指出的那样,C ++标准将此行为定义为“未定义行为”,因此任何事情都可能发生,但是大多数当前的编译器将执行以下操作:

因此,您实际上是将指向char的指针传递给cout.operator<<()。这被视为C样式的字符串,并将打印该内存地址中的所有内容,直到下一个\0 nul char。您的'd'初始化将您的char放到那里。其余的几乎是随机的。