[英]What's the difference between these two ways of incrementing pointers for a 2D array in 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;
然后我試圖將指針q
從A
的零索引增加到下一個。
我寫兩個函數:
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.