c指针与字符串

时间:2011-04-09 23:26:29

标签: c string pointers

尝试更好地学习指针我编写了这段代码。目的是在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

3 个答案:

答案 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);
}