为了更好地学习指针,我编写了这段代码。目的是在 for 循环中一次打印字符串的一个字符。再次尝试学习如何递增指针然后取消引用指针。
char *string = "abcdef";
char *pointer = &string;
for (int i =0; i < 4; i++)
{
printf("the next charater is %c\n", *pointer);
pointer = (char *)pointer + sizeof(char);
}
想要它打印:
下一个字符是a
下一个字符是b
下一个字符是c
下一个字符是d
最佳答案
char *pointer = &string;
应该是
char *pointer = string;
string
是一个指针变量,其中包含字符串文字的地址。您需要字符串文字的地址,因此您应该简单地复制 string
中的值 - 而不是获取局部指针变量的地址 - 您当前的代码为您提供了一个指向字符串指针的指针。
此外,pointer = (char *)pointer + sizeof(char);
不需要强制转换,也不应使用 sizeof(char)
。当递增类型为 pointer to X
的变量时,将其递增 1 会将其递增 sizeof(X)
字节 - 递增 1 以指向下一个 X
。使用 pointer += 1;
或 ++pointer
代替。
关于c 带字符串的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5608618/