[英]Incrementing pointer on string results in pointer to char not on string
[英]Incrementing the lvalue of a pointer to char?
我的问题很简单:
说你有这个:
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;
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
将char增加一个(=将'a'
更改为'b'
)。 (之前, ++*chrptr
对您不起作用,因为该字符串位于内存的只读部分。如果您使用const char*
而不是char*
指向该字符串,则会得到一个有用的编译错误,而不是意外的运行时行为。)
另请注意:
如果是简单的语句,则++*chrptr;
等效于(*chrptr)++;
。 操作员顺序很重要(先引用,然后递增)。
OTOH, *chrptr++
是先运算后优先的,然后是增量引用。 如果不确定优先级,请添加括号。
您不需要使用取消引用运算符*
再次取消对指针的引用。
您只需要执行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)++可以使用。希望这对您有帮助。 祝好运:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.