我最近在堆栈溢出(see the whole post here)上遇到了以下代码: -
char *c = "200939915";
char *d = c + 1;
它指定了一个" 00939915"的值,我觉得这非常违反直觉。
有人可以解释这个过程的机制吗? 这叫什么东西?
我是一名新生并且在做CS入门课程,所以这会有很大的帮助:)。
答案 0 :(得分:7)
char *c = "200939915";
这里c
是一个指向char的指针(200939915
的第一个字符)。
c+1
将指向下一个字符。
(2 0 0 9 3 9 9 1 5)
^ ^
| |
c c+1
答案 1 :(得分:2)
d
不会“包含”您所说的价值。
d
是指向char
的指针,通过将其设置为c+1
,它指向(包含内存地址)到您声明的字符串文字的第二个元素。
我猜你做了类似这样的事情printf("%s",d);
这导致printf从位置d
开始读取内存并输出其中的每个字符,直到它捕获'\0'
(结束) ())然后完成。
它不会截断您的字符串,只是在另一个位置开始读取它。
答案 2 :(得分:1)
c [0] = 2
c [1] = 0
c [2] = 0
c [3] = 9
等等。
c
是第一个字符2
的地址。因此,d
是地址c
+ 1,因此在这种情况下,第一个0
的地址。
答案 3 :(得分:1)
正如@Gaurav Sehgal指出的那样,你的变量只指向字符串,而不是数字。你期望d的价值在这里:
char *c = "abcdefghi";
char *d = c + 1;