繁体   English   中英

增加指向char的指针的左值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM