我的问题很简单:递增char指针的左值?
假设你有这样的:
char *chrptr = "junk";
想象的时候,*chrptr
将在j
点。有没有办法将当前字符j
递增到下一个字符,在这种情况下将是k
?我不想去下一个角色,我想增加当前指向的角色。
我是C新手,我尝试过:(*chrptr)++
不起作用。
我的问题很简单:递增char指针的左值?
假设你有这样的:
char *chrptr = "junk";
想象的时候,*chrptr
将在j
点。有没有办法将当前字符j
递增到下一个字符,在这种情况下将是k
?我不想去下一个角色,我想增加当前指向的角色。
我是C新手,我尝试过:(*chrptr)++
不起作用。
您不需要使用解除引用运算符*
再次解引用指针。
您只需要执行chrptr++
即可在内存中前进字符指针。
更新
你可以用一个while
环围绕搜索的字符。
char *chrptr = "junk";
char search = 'k';
while (*chrptr) {
if (*chrptr == search)
printf("%c\n", *chrptr);
chtptr++;
}
根据您的编辑,好像你要修改字符串,你不能这样做,有一个常量字符串,其实你可以但行为是不确定的。所以,你需要定义更改为字符的非常量数组:
//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;
虽然我不会使用这种语法。由于它不是常见的东西,它只会让读者感到困惑。在我看来,更好的方法是编写'chrptr [0] = chrptr [0] +1;',这将产生相同的机器码。 – Lundin
我已经添加了其他一些,但并不罕见,恕我直言,这是最简洁的形式。 – iabdalkader
@Lundin你为什么要说'chrptr [0]'两次? 'anything + = 1'的意思是“任何东西增加1”,乍一看非常容易 – Kos
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而增加然后解除引用。如果不确定优先级,请添加括号。
哦,我看到你的编辑。让我扩大,你的问题是不同的 – Kos
是的,我的例子非常糟糕。对不起,因为问了一个措辞严厉的问题而浪费你的时间。 – user1661781
别担心。完成,看看编辑 – Kos
看到这个(* 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这将帮助你。祝你好运:)
对不起,我的例子非常糟糕。这不是我的意思 - 请阅读我更新的示例。 – user1661781