指向自定义地址

时间:2015-01-11 19:53:22

标签: c pointers

我有一个奇怪的问题。考虑使用以下代码:

char *ptr = 'A';

ptr将指向地址0x41。我知道你不能取消引用这个指针。 如何制作一个类似的代码,使ptr指向由字符串生成的地址? 例如,如果我们有字符串" abc",那么ptr将指向的地址是该字符串的值。 这不是我正在寻找的:

char *ptr = "abc"

因为它会使字符串abc所在的ptr点存储器。

我们将能够制作的字符串的最长长度(在32位机器上)

3 个答案:

答案 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"就是你想要的。