30/09/2018, 16:05

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

Dũng Kon viết 18:06 ngày 30/09/2018

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.

Nguyễn Minh Dũng viết 18:18 ngày 30/09/2018

@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

Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại..... Mặt khác âm thanh cũng tốt hơn nhiều so với khóa họ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.

Cho em hỏi nhập xuất có vấn đề gì vậy ạ? void nhap(int *a, int &n) { cout<<"nhap so phan tu mang"<<endl; cin>>n; a=(int*)calloc(n,sizeof(int)); for(int i=0;i<n;i++) { cout<<"a["<<i<<"]="; cin>>*(a+i); } } void hienmang(int *a, int n) { for(int i=0;i<n;i++) cout<<*(a+i); cout<<endl; }

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

Có vấn đề luôn, vấn đề bự, nhiều bạn sai cái này. Vì C truyền giá trị chứ không truyền biến vào hàm. Nên trong hàm void myfunction(char *q) chỉ có địa chỉ của q là truyền vào chứ không phải là q. Các thao tác bên trong hàm myfunction sẽ vô tác dụng với p ở bên hàm main. Điều này dẫn đến dù ta có cấp phát vùng nhớ cho q bên trong myfunciont đi chăng nữa thì p ở hàm main cũng không nhận được gì. Vì p ở hàm main chưa bao giờ chui vào trong myfunction. Để giải quyết vấn đề này thì ta dùng con …

viết 18:10 ngày 30/09/2018

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 ^^

viết 18:14 ngày 30/09/2018

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

Bài liên quan
0