Thêm phần tử bằng con trỏ

Thêm phần tử vào đầu mảng dùng con trỏ cấp phát động.

void insertToFirstElementOfArray(char* a, int *n, char k)
{
    char* temp = malloc(*n*sizeof(char));

    for(int i=0; i<*n; i++)
    {
        temp[i] = a[i];
    }
    a = malloc((*n+=1)*sizeof(char));

    for(int i=0; i<*n; i++)
    {
        a[i] = temp[i];
    }
    
    free(temp);

    for(int i=*n; i>=0; i--)
    {
        a[i] = a[i-1];
    }
    a[0] = k;
}

Các anh trả lời giúp em tại sao sau khi ra khỏi hàm con thì giá trị thêm vào lại bị mất

1 Like

code này sai nhiều lỗi lắm bạn ơi, không chạy được đâu đa phần là lỗi cũ pháp.

2 Likes

@nguyendh cho ví dụ về cách sử dụng hàm nữa đi, để như vậy giống như đánh đố người khác “Đố mày cái hàm tao viết thế này này, xài như thế nào?”

Thêm nữa, tất cả các khai báo malloc trong hàm khác mà không sử dụng con trỏ cấp 2 đều là vô hiệu trong C. @nguyendh đọc thêm các bài kiểm tra kiến thức C sẽ thấy. Lý do là khi truyền con trỏ cấp một vào một hàm. Cái được truyền vào là địa chỉ mà con trỏ đó đang giữ chứ không phải con trỏ đó truyền vào. Bạn xem thêm khái niệm truyền tham trị trong C

Trên diễn đàn đã có người gặp lỗi tương tự, tiêu đề cũng tương tự. Hệ thống chắc chắn đã cảnh báo bạn là đã có câu hỏi tương tự, thế mà @nguyendh lơ luôn ko thèm xem. Dẫn đến đặt câu hỏi trùng.

@nguyendh Có thể xem thêm bài này, bài kiểm tra kiến thức C

2 Likes

em xin lỗi, em mới học đến pointer nên không rõ lắm về những cách cấp phát bộ nhớ. Cảm ơn anh và những ví dụ, em sẽ rút kinh nghiệm ^^

2 Likes

uhm cảm ơn bạn, mình đang học về pointer nên chưa nẵm vững được cách sử dụng

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?