尝试更好地学习指针我编写了这段代码。目的是在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);
}
想要打印:
下一个字符是
下一个字符是b
下一个字符是c
下一个字符是d
答案 0 :(得分:4)
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
。
答案 1 :(得分:2)
如果您想一次打印(或以其他方式处理)整个字符串一个字符,您可以使用以下习语:
char *p = /* ... */;
while (p && *p) {
printf("next char: %c\n", *p++);
}
该条件首先测试p是否为NULL,即是否完全取消引用p是明智的。如果p不为NULL,*p
将测试您是否已到达字符串的末尾,由'\0'
字符表示,该字符恰好为0.
答案 2 :(得分:0)
如果你想使用指向字符串的指针,你可以这样使用:
char *string = "abcdef";
char **pointer = &string;
int i;
for (i =0; i < 4; i++)
{
printf("the next charater is %c\n", **pointer);
*pointer = *pointer + sizeof(char);
}