(有奖竞答)void*和&有什么区别,为什么我这个取地址符没用?

img


我的取地址符&应该有地址显示,但是为什么没有,而void*可以,希望让我死的明白。给个解释或知识点。有奖竞答哟

cout 是ostream 类型,<<是他的重载运算符,
它重载了许多<<,看它的源码,你会看到类似于以下。
basic_ostream& __CLR_OR_THIS_CALL operator<<(const void* _Val) { // insert a void pointer
basic_ostream& __CLR_OR_THIS_CALL operator<<(double _Val) { // insert a double
其中对void* 是直接输出地址,对于char* 则直接输出字符串 类型

因为much是char类型,&much是char *类型,cout输出时会将&much认为是字符串进行输出的。由于这个地址指向的内容没有可见内容,所以啥也没输出
而void * ,int * 这类指针,cout是将他们当做整型来看待的,所以输出了指针自身的地址。而much变量可能编译器默认为0了,所以输出的是0