我有一个指向字符的变量字。然而,每当我尝试增加& c时,我都会得到c:
的奇怪值char *word = "testing";
char c = *word; // 't'
c = *(&c + 1); // want to be 'e'
我做错了吗?
答案 0 :(得分:4)
该行
char c = *word; // 't'
在堆栈的内存中为新char(c
)分配空间。然后它将此char设置为't'
,因为这是*word
处的内容。 c(&c
)的地址不会与word
相同。
要做你想做的事情:
char c; //allocate space for a char
char *word = "testing";
c = *word; // c == 't'
c = *(word + 1); // c == 'e'
答案 1 :(得分:2)
c
的地址位于堆栈的某个位置。它与word
指向的地址不同。你想这样做:
char *word = "testing";
char *c = word; //same as &word[0]
*c; //'t'
c += 1;
*c; //'e'
答案 2 :(得分:1)
c
是一个char
个对象,其值为't'
。
&c + 1
是一个有效的地址,指向c
在内存中的位置,但那里没有任何对象。 (它的有效只是因为一个特殊情况规则允许指针指向数组的末尾,其中单个对象被视为1元素数组。)取消引用该地址会导致未定义的行为;实际上,它可能会在内存中c
之后获取正好存储的垃圾。
通过将c
初始化为*word
,您没有将c
指向字符串的第一个字符,而是使其包含副本字符串的第一个字符。