2012-10-23 76 views
1

我的問題很簡單:遞增char指針的左值?

假設你有這樣的:

char *chrptr = "junk"; 

想象的時候,*chrptr將在j點。有沒有辦法將當前字符j遞增到下一個字符,在這種情況下將是k?我不想去下一個角色,我想增加當前指向的角色。

我是C新手,我嘗試過:(*chrptr)++不起作用。

回答

1

您不需要使用解除引用運算符*再次解引用指針。

您只需要執行chrptr++即可在內存中前進字符指針。

更新

你可以用一個while環圍繞搜索的字符。

char *chrptr = "junk"; 
char search = 'k'; 

while (*chrptr) { 
    if (*chrptr == search) 
    printf("%c\n", *chrptr); 
    chtptr++; 
} 
+0

對不起,我的例子非常糟糕。這不是我的意思 - 請閱讀我更新的示例。 – user1661781

3

根據您的編輯,好像你要修改字符串,你不能這樣做,有一個常量字符串,其實你可以但行爲是不確定的。所以,你需要定義更改爲字符的非常量數組:

//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; 
+0

雖然我不會使用這種語法。由於它不是常見的東西,它只會讓讀者感到困惑。在我看來,更好的方法是編寫'chrptr [0] = chrptr [0] +1;',這將產生相同的機器碼。 – Lundin

+1

我已經添加了其他一些,但並不罕見,恕我直言,這是最簡潔的形式。 – iabdalkader

+0

@Lundin你爲什麼要說'chrptr [0]'兩次? 'anything + = 1'的意思是「任何東西增加1」,乍一看非常容易 – Kos

2
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而增加然後解除引用。如果不確定優先級,請添加括號。

+0

哦,我看到你的編輯。讓我擴大,你的問題是不同的 – Kos

+0

是的,我的例子非常糟糕。對不起,因爲問了一個措辭嚴厲的問題而浪費你的時間。 – user1661781

+0

別擔心。完成,看看編輯 – Kos

1

看到這個(* 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這將幫助你。祝你好運:)