我有一个奇怪的问题。考虑使用以下代码:
char *ptr = 'A';
ptr将指向地址0x41。我知道你不能取消引用这个指针。 如何制作一个类似的代码,使ptr指向由字符串生成的地址? 例如,如果我们有字符串" abc",那么ptr将指向的地址是该字符串的值。 这不是我正在寻找的:
char *ptr = "abc"
因为它会使字符串abc所在的ptr点存储器。
我们将能够制作的字符串的最长长度(在32位机器上)
答案 0 :(得分:0)
如果确实希望将ptr
值设置为字符串文字所代表的数据的位模式(在32台机器上使用四个4个字符的4个字符),这就是你要写的:
char *ptr = *((char**)"abcd");
BTW:指针类型与“技巧”完全无关
int *ptr2 = *(int**)"abcd";
简短说明:像"abcd"
这样的字符串文字在语法上被视为char
指针(或const char
指针)。可以使用*
运算符取消引用指针的内容。您需要说服编译器取消引用32位实体,并且指针是32位内存模型上的32位实体。即使是32位值也可用于获取由4-ASCII-chars的字符串文字构建表示的模式,您只需要使编译器将文字视为int
(在32-上)比特操作数机器),这看起来也更清洁:
int s2i = *(int*)"ABCD"; // 0x64636261 on a Little Endian architecture
......还有另一个技巧,那似乎是一些编译器:
int c2i = ((int)'ABCD'); // 0x61626364 on a Little Endian architecture
答案 1 :(得分:-1)
当你做的时候
char *ptr = 'A';
你实际上只是在做
char *ptr = 65;
但是,我不明白你的意思是“字符串创建的地址”。
要获得更高的值,您可以使用数字:
char *ptr = 13213;
(不知道你为什么要那样做)
答案 2 :(得分:-1)
与您称之为字符串的char *ptr = 'A'
相当于char *ptr = 'ABCD'
。包含多个字符的整数字符常量的值是实现定义的。
char *ptr = (int)("hello")
不您要查找的内容,因为分配给ptr
的值很可能与char *ptr = "hello"
相同。而是char *ptr = *(int *)"hello"
就是你想要的。