static_cast<void*> 及 C++字符指针解惑例:#include <iostream>
说明两点: (1):对于c 如果这样写c = "123456",对于编译器来说, 它会首先创建一个字符串常量, 存放在内存中, 其内容是"123456",然后把它的首地址赋给c, 这个过程是编译器自动完成的.也就是说, 编译器自动完成了以下动作: 1. 创建字串常量放于内存当中, 并记下这个地址 2. 将这个首地址赋给c 对于早期有的编译器不能优化字串常量, 那么象如下写: char * char *q = "123456"; 虽然从字面上看, 两个字串常量的值是一样的, 但是他们的地址却不同, 所以此时p和q中的地址值也不相同, 但对现在的编译器, 它基本能够优化较简单的字串常量, 它会检查两个字串中的字符数和字符内容是否是一模一样, 如果相同, 它会把它们初始化为同一地址。 (2):为什么要进行static_cast<void*>(c)转换才能得到地址? 这是一个重载的问题: cout 对 char*和const char*类型的operator << 重载都是输出char*指针指向的字符串的内容,而不是这个指针的值 The static_cast above is necessary because the output stream insertion operator is overloaded to treat a char* as a null-terminated string. All other pointers have their addresses printed out in hexadecimal. (这里的all other pointers 是指float,int等不用转换的指针)
|
|