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+=1ke *ptr++. Hasil yang diharapkan harus berupa seluruh array dan nomor 1 tetapi ketika saya menggunakan *ptr++hasilnya adalah 0.
Apakah ada perbedaan antara +=1dan ++? Saya pikir keduanya sama.
allocateIntArrayadalah nama yang buruk karena tampaknya Anda mallocadalah array dari fungsi tersebut, tetapi Anda tidak melakukannya. Saya menyarankan fillIntArraysebagai gantinya. 2) Anda tidak menggunakan nilai pengembalian allocateIntArray. Saya sarankan Anda mengubah jenis pengembalian menjadi void. 3) Sebaiknya tidak if (ptr != NULL)dalam fungsi increasePointermenjadi if (*ptr != NULL)? 4) Cast in malloctidak 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.htidak digunakan.
p+=1adalah seperti ++p, tidak sepertip++
string.