簡體   English   中英

在C中有很多增加指針的方法,這里有什么區別?

[英]Are there many ways of incrementing a pointer in C and what's the difference here?

我正在學習C,並且試圖弄清楚如何在具有此實例化時增加指針: int A[] = {111, 222, 333}; int *q = A; int A[] = {111, 222, 333}; int *q = A; 然后我試圖將指針qA的零索引增加到下一個。

我寫兩個函數:

void incr_ptr_single ( int *p ) {
    *&p = *&p + 1;
}

void incr_ptr_double ( int **h ) {
    *h = *h + 1;
}

我知道說void incr_ptr( int *p) { p = p+1; } inc_ptr(q); void incr_ptr( int *p) { p = p+1; } inc_ptr(q); 不執行我想要的操作,因為C的函數是“按值傳遞”。

目前, incr_ptr_double(&q) == A[1]incr_ptr_single(q) == A[0] 我想知道如何修復incr_ptr_single函數,使其表現得像incr_ptr_double

一種“修復” incr_ptr_single方法是讓它返回遞增的指針作為函數結果:

int * incr_ptr_single ( int *p ) {
    return p + 1;
}

然后可以將其稱為:

q = incr_ptr_single(q);
q++;

或者,如果您希望對代碼進行混淆處理,以使其變得更慢且可讀性更差:

int* incr_ptr (const int* p) {
  return (int*)++p;
}

或者

void incr_ptr (int** p) 
{
  (*p)++;
}

還有許多其他使您的代碼更糟的方法,例如類似於函數的宏。

或者,如果由於某種原因的不好的編程習慣不是您的最佳選擇,那就選擇q++

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM