我的問題很簡單:遞增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