C'yi incelemeye yeni başladım ve işaretçiyi bir işlevin parametresi olarak işaretçiye geçirme hakkında bir örnek yaparken bir sorun buldum.
Bu benim örnek kodum:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int* allocateIntArray(int* ptr, int size){
if (ptr != NULL){
for (int i = 0; i < size; i++){
ptr[i] = i;
}
}
return ptr;
}
void increasePointer(int** ptr){
if (ptr != NULL){
*ptr += 1; /* <----------------------------- This is line 16 */
}
}
int main()
{
int* p1 = (int*)malloc(sizeof(int)* 10);
allocateIntArray(p1, 10);
for (int i = 0; i < 10; i++){
printf("%d\n", p1[i]);
}
increasePointer(&p1);
printf("%d\n", *p1);
p1--;
free(p1);
fgets(string, sizeof(string), stdin);
return 0;
}
I ve değişiklikler bu sorun, hat 16 oluşur *ptr+=1
için *ptr++
. Beklenen sonuç tüm dizi ve 1 numara olmalıdır, ancak kullandığımda *ptr++
sonuç 0 olur.
Arasında herhangi ı artışlar var mıdır +=1
ve ++
? İkisinin de aynı olduğunu düşündüm.
allocateIntArray
gibi göründüğü için kötü bir isimdir malloc
, ancak siz değilsiniz. Onun fillIntArray
yerine öneririm . 2) Dönüş değerini kullanmıyorsunuz allocateIntArray
. Dönüş türünü olarak değiştirmenizi öneririm void
. 3) if (ptr != NULL)
İşlevsel increasePointer
olmamalı if (*ptr != NULL)
mı? 4) malloc
Alçıya alma gereksizdir. Sourav'ın yukarıdaki yorumuna bakın. 5) Bu: for (int i = 0; i < 10; i++){ printf("%d\n", p1[i]); }
ve printf("%d\n", *p1); p1--;
kapatılması gerekiyor if(p1 != NULL)
. 6) string.h
kullanılmıyor.
p+=1
gibi ++p
, değil gibip++
string
.