ฉันเพิ่งเริ่มศึกษา C และเมื่อทำตัวอย่างหนึ่งเกี่ยวกับการส่งตัวชี้ไปยังตัวชี้เป็นพารามิเตอร์ของฟังก์ชันฉันพบปัญหา
นี่คือโค้ดตัวอย่างของฉัน:
#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;
}
ปัญหาเกิดขึ้นในบรรทัดที่ 16 เมื่อฉันแก้ไข*ptr+=1เป็น*ptr++. ผลลัพธ์ที่คาดไว้ควรเป็นอาร์เรย์ทั้งหมดและหมายเลข 1 แต่เมื่อฉันใช้*ptr++ผลลัพธ์คือ 0
มีความแตกต่างระหว่าง+=1และ++หรือไม่? ฉันคิดว่าทั้งสองคนเหมือนกัน
allocateIntArrayเป็นชื่อเสียเนื่องจากดูเหมือนว่าคุณmallocเป็นอาร์เรย์จากฟังก์ชัน แต่คุณไม่ทำ ฉันขอแนะนำfillIntArrayแทน 2) คุณไม่ได้ใช้ค่าตอบแทนของallocateIntArray. voidผมขอแนะนำให้คุณเปลี่ยนชนิดกลับไป 3) ไม่ควรif (ptr != NULL)ในการทำงานincreasePointerจะเป็นif (*ptr != NULL)? 4) การแคสต์mallocเป็นสิ่งที่ไม่จำเป็น ดูความคิดเห็นของ Sourav ด้านบน 5) สิ่งนี้: for (int i = 0; i < 10; i++){ printf("%d\n", p1[i]); }และprintf("%d\n", *p1); p1--;จำเป็นต้องอยู่ในif(p1 != NULL). 6) string.hไม่ได้ใช้
                p+=1เป็นเหมือน++pไม่เหมือนp++
                
stringไว้