Why is a char pointer dereferenced automatically in a dynamic array
本问题已经有最佳答案,请猛点这里访问。
也许是个愚蠢的问题。当我使用指向char数组的指针
而不是一个int数组,它执行我所期望的操作。它打印第一个元素的地址。
为什么在打印指针时char元素会被取消引用?
1 2 3 4 5 6 7 8 9 | char* as = new char[100]; as[0] = 'a'; as[1] = 'b'; as[2] = NULL; cout << as << endl; int* s = new int[100]; s[0] = 2; cout << s << endl; |
之所以这样问是因为当我试图将地址传递到第一个char元素
1 2 | char ** d = &as; cout << d <<"this is d" << endl; |
没有重载输出运算符
1 2 | std::cout <<"Address of string is" << static_cast<void*>(as) << ' '; |
在旁注中,代码
1 2 | char ** d = &as; cout << d <<"this is d" << endl; |
不打印字符串的地址,即包含在
iostreams专门处理
1 2 | std::cout <<"hello world "; |
(请记住,字符串文字表达式在传递给
如果您不想这样做,可以将其强制转换为
1 2 3 4 5 | char* as = new char[100]; as[0] = 'a'; as[1] = 'b'; as[2] = NULL; cout << (void*)as << endl; |
您的"修复"实际上被破坏了,因为您正在打印指针
它打印字符串,因为这就是特定
1 | cout << static_cast<void *>(as) << endl; |
当