【发布时间】:2012-10-23 05:46:50
【问题描述】:
我的问题很简单:
假设你有这个:
char *chrptr = "junk";
想象一下,*chrptr 将指向 j。有没有办法将当前字符j 增加到下一个字符,在这种情况下是k?我不想转到下一个字符,我想增加当前指向的字符。
我是 C 新手,我尝试过的方法:(*chrptr)++ 不起作用。
【问题讨论】:
我的问题很简单:
假设你有这个:
char *chrptr = "junk";
想象一下,*chrptr 将指向 j。有没有办法将当前字符j 增加到下一个字符,在这种情况下是k?我不想转到下一个字符,我想增加当前指向的字符。
我是 C 新手,我尝试过的方法:(*chrptr)++ 不起作用。
【问题讨论】:
根据您的编辑,您似乎想要修改字符串,您不能使用常量字符串来执行此操作,实际上您可以,但该行为未定义。所以你需要把定义改成一个非常量的字符数组:
//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;,这将产生相同的机器代码。
chrptr[0]? anything += 1 读作“将任何内容增加 1”,乍一看非常容易理解
chrptr[i]++。从那里,这一步到chrptr[i++] 不远了,它编译得很好,但意味着完全不同的东西。将 ++ 运算符与其他运算符一起使用通常是个坏主意。
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 类型的值,因为指针已被取消引用。这两个恰好是“左值”(= 实际对象),因此您可以修改它们:
++ chrptr 将指针加一(= 将指针前移一个对象)++ *chrptr 将字符加一(= 将 'a' 更改为 'b')。(之前,++*chrptr 对您不起作用,因为该字符串位于内存的只读部分中。如果您使用 const char* 而不是 char* 指向它,您会得到一个有用的编译错误而不是意外的运行时行为。)
另请注意:
在简单语句的情况下,++*chrptr; 等价于(*chrptr)++;。运算符顺序很重要(取消引用,然后递增)。
OTOH,*chrptr++ 是先递增然后取消引用,因为 operator precedence。如果不确定优先级,请添加括号。
【讨论】:
您无需使用取消引用运算符* 再次取消引用指针。
您只需要执行chrptr++ 即可在内存中推进字符指针。
更新
您可以环绕 while 循环来搜索字符。
char *chrptr = "junk";
char search = 'k';
while (*chrptr) {
if (*chrptr == search)
printf("%c\n", *chrptr);
chtptr++;
}
【讨论】:
看到这个 (*chrptr)++;工作正常,但这将增加 chrptr 指向的数组的第一个字符。 在您的情况下,您正在使用类似
的语句char *chrptr = "垃圾";
这里 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)++ 会工作。希望这会对你有所帮助。祝你好运:)
【讨论】: