我有一个奇怪的问题。考虑使用以下代码:
char *ptr = 'A';
ptr将指向地址0x41。我知道你不能直接取消引用这个指针。 如何编写一个类似的代码,使 ptr 指向由字符串创建的地址? 例如,如果我们有字符串“abc”,那么 ptr 指向的地址就是该字符串的值。 这不是我要找的:
char *ptr = "abc"
因为它会让ptr指向字符串abc所在的内存。
我们能够制作的字符串的最长长度是多少(在 32 位机器上)
最佳答案
如果您确实希望将ptr
值设置为字符串文字表示的数据的位模式(在32位机器上使用四个4个字符代表4个字节) ),这就是你必须写的:
char *ptr = *((char**)"abcd");
顺便说一句:指针类型与“技巧”完全无关
int *ptr2 = *(int**)"abcd";
简短说明:像 "abcd"
这样的字符串文字在语法上被视为 char
指针(或 const char
指针)。可以使用 *
运算符取消引用指针的内容。您需要说服编译器取消引用 32 位实体,而指针就是 32 位内存模型上的此类 32 位实体。即使是 32 位值也可用于获取由 4 个 ASCII 字符构建的字符串文字表示的模式,您只需让编译器将文字视为 int
(在32 位操作数机),这看起来也干净得多:
int s2i = *(int*)"ABCD"; // 0x64636261 on a Little Endian architecture
...还有另一个技巧,似乎是一些编译器:
int c2i = ((int)'ABCD'); // 0x61626364 on a Little Endian architecture
关于c - 指向自定义地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27891381/