2012-10-23 48 views
1

我的问题很简单:递增char指针的左值?

假设你有这样的:

char *chrptr = "junk"; 

想象的时候,*chrptr将在j点。有没有办法将当前字符j递增到下一个字符,在这种情况下将是k?我不想去下一个角色,我想增加当前指向的角色。

我是C新手,我尝试过:(*chrptr)++不起作用。

回答

1

您不需要使用解除引用运算符*再次解引用指针。

您只需要执行chrptr++即可在内存中前进字符指针。

更新

你可以用一个while环围绕搜索的字符。

char *chrptr = "junk"; 
char search = 'k'; 

while (*chrptr) { 
    if (*chrptr == search) 
    printf("%c\n", *chrptr); 
    chtptr++; 
} 
+0

对不起,我的例子非常糟糕。这不是我的意思 - 请阅读我更新的示例。 – user1661781

3

根据您的编辑,好像你要修改字符串,你不能这样做,有一个常量字符串,其实你可以但行为是不确定的。所以,你需要定义更改为字符的非常量数组:

//This initializes a 5 element array including the null byte at the end 
char chrptr[] = "junk"; 
//now you can modify that 
chrptr[0]++; 
//or equivalently 
chrptr[0] +=1; 
chrptr[0] = chrptr[0]+1; 
+0

虽然我不会使用这种语法。由于它不是常见的东西,它只会让读者感到困惑。在我看来,更好的方法是编写'chrptr [0] = chrptr [0] +1;',这将产生相同的机器码。 – Lundin

+1

我已经添加了其他一些,但并不罕见,恕我直言,这是最简洁的形式。 – iabdalkader

+0

@Lundin你为什么要说'chrptr [0]'两次? 'anything + = 1'的意思是“任何东西增加1”,乍一看非常容易 – Kos

2
char *chrptr = "junk"; 

此代码是不是真的好。像“垃圾”这样的字符串文字是指向只读内存的指针。你不应该修改它们。因此,无论说:

const char* chrptr = "junk"; // pointer to a const; no modifications 

或(在您的情况):

char chrArray[] = "junk"; 

这将创建人物的堆栈上的5个元素的数组,用“垃圾”(加空终止)初始化。现在,你可以自由地修改它:

chrArray[0] ++; 
(*chrArray) ++; 

(一些吃剩的言论)

我是新来的C,但东西,如(* chrptr)++唐没有工作。

他们工作,但不同。让我总结一下:

  • chrptr是指针类型指针的值。
  • *chrptr是char类型的值,因为指针已被取消引用。

这两种碰巧是“L值”(=实际的对象),因此可以修改它们:

  • ++ chrptr递增一个指针(=前进指针一个对象正向)
  • ++ *chrptr将字符增加1(=将'a'更改为'b')。

(之前,++*chrptr没有为你工作,因为字符串在内存只读部分。如果你曾指出它使用const char*没有char*来,你会得到一个有用的编译错误,而不是意外。运行时行为)


还要注意:

在一个简单的语句的情况下,++*chrptr;相当于(*chrptr)++;。操作员的顺序很重要(解除引用,然后增加)。

OTOH,*chrptr++是因为operator precedence而增加然后解除引用。如果不确定优先级,请添加括号。

+0

哦,我看到你的编辑。让我扩大,你的问题是不同的 – Kos

+0

是的,我的例子非常糟糕。对不起,因为问了一个措辞严厉的问题而浪费你的时间。 – user1661781

+0

别担心。完成,看看编辑 – Kos

1

看到这个(* chrptr)++;工作正常,但这会增加chrptr指向的数组的第一个字符。 在你的情况下,你使用的语句如

char * chrptr =“junk”;

这里chrptr指向一个const char数组,所以使用(* chrptr)++;它会增加不反映字符串中的变化。

但是如果你使用的代码像这样(http://codepad.org/FJMB1ryv): -

#include<iostream> 

using namespace std; 

int main() 
{ 
char a[]="yogendra"; 
char *y=a;//(char*)"junk"; 
(*y)++; 
cout<<y<<endl; 
return 0; 
} 

你(* Y)++将work.Hoping这将帮助你。祝你好运:)