Saya baru saja mulai mempelajari C, dan ketika melakukan satu contoh tentang meneruskan pointer ke pointer sebagai parameter fungsi, saya menemukan masalah.
Ini adalah kode contoh saya:
#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;
}
Masalah terjadi di baris 16, saat saya mengubah *ptr+=1
ke *ptr++
. Hasil yang diharapkan harus berupa seluruh array dan nomor 1 tetapi ketika saya menggunakan *ptr++
hasilnya adalah 0.
Apakah ada perbedaan antara +=1
dan ++
? Saya pikir keduanya sama.
allocateIntArray
adalah nama yang buruk karena tampaknya Anda malloc
adalah array dari fungsi tersebut, tetapi Anda tidak melakukannya. Saya menyarankan fillIntArray
sebagai gantinya. 2) Anda tidak menggunakan nilai pengembalian allocateIntArray
. Saya sarankan Anda mengubah jenis pengembalian menjadi void
. 3) Sebaiknya tidak if (ptr != NULL)
dalam fungsi increasePointer
menjadi if (*ptr != NULL)
? 4) Cast in malloc
tidak perlu. Lihat komentar Sourav di atas. 5) Ini: for (int i = 0; i < 10; i++){ printf("%d\n", p1[i]); }
dan printf("%d\n", *p1); p1--;
perlu dilampirkan if(p1 != NULL)
. 6) string.h
tidak digunakan.
p+=1
adalah seperti ++p
, tidak sepertip++
string
.