2017-08-24 52 views
1

遞增C指針這裏是我的示例代碼:如何由兩個

float *dstptr; 
float *srcptr; 
float A[100]; 
float B[32]; 
int main(void) 
    { 
int i=0; 
while(i < NUM_ITERATION) 
    { 
    srcptr = &B[0]; 
    for(i=0; i< 32; i++) 
    { 
     *dstptr++ = *srcptr++; 
     dstptr = circptr(dstptr,1,(float *)&A[0], 100); 
    } 
    i++; 
} 

return 0; 
} 

這裏*dstptr++ = *srcptr++;增量都dstptrsrcptr由一個一次。但我需要將它們增加兩個。 有沒有任何線索如何在C中做到這一點?

+6

嘗試用'PTR + = 2' –

+0

你的意思是* dstptr ++ = 2? – nisha

+2

我的意思是'dstptr + = 2'或'srcptr + = 2' –

回答

3

其所謂pointer arithmetic

,它可以讓你做

dstptr += nOfElementsToSkip; 
srcptr += nOfElementsToSkip; 
*dstptr = *srcptr; 

以及遞增。或者,如果你不想修改指針

*(dstptr+nOfElementsToSkip) = *(srcptr+nOfElementsToSkip); // Same as 
dstptr[nOfElementsToSkip] = srcptr[nOfElementsToSkip];  // This is more clear 

編輯

你的情況變化nOfElementsToSkip2

也如@unwind所述,您必須爲指針指定一些動態內存,否則解除引用會導致未定義的行爲。

float *dstptr = malloc(sizeof(float) * NUM_ITERATION); 
// Do something with pointer 
// And if you dont need them anymore 
free(dstptr); 
+1

謝謝你的幫助 – nisha

+3

永遠不要寫'*(指針+索引)',總是使用'指針[索引]'。意思完全一樣,但更清晰。 – unwind

+0

在OP的示例代碼中,初始化可能是'dstptr = &B[0];' –

3

最好不要在同一表達式中混合多個操作符,這是危險的,有時難以閱讀。相反,這樣做:

*dstptr = *srcptr; 
dstptr += 2; 
srcptr += 2; 

或者,使用最可讀的形式,如果這是一個選項:

for(size_t i=0; i<n; i+=2) 
{ 
    ... 
    dstptr[i] = srcptr[i]; 
    ... 
}