Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 20 kết quả

Đề tài: Hỏi về cấu trúc động

  1. #1
    Ngày gia nhập
    08 2008
    Bài viết
    1

    Mặc định Hỏi về cấu trúc động

    Ví dụ mình khai báo cấu trúc thế này
    PHP Code:
    typedef struct
    {
           
    char ten[30];
           
    int diem[2]; 
    }
    hocsinh
    Bây giờ mình muốn khai báo cấu trúc động với biến là danhsach ( với cấu trúc như trên )thì phải khai báo thế nào?
    Rồi khi dùng cấu trúc động thì mình truy cập vào từng biến kiểu gì, vẫn dùng danhsach[i].ten được không?

  2. #2
    Ngày gia nhập
    09 2007
    Bài viết
    724

    1 - danh sách ở đây là danh sách liên kết hả bạn?
    nếu như vậy thì bạn có thể làm như sau:

    Code:
    typedef struct _hs
    {
           char ten[30];
           int diem[2];
           _hs *pNext;
    }hocsinh;

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi goroshi Xem bài viết
    Ví dụ mình khai báo cấu trúc thế này
    PHP Code:
    typedef struct
    {
           
    char ten[30];
           
    int diem[2]; 
    }
    hocsinh
    Bây giờ mình muốn khai báo cấu trúc động với biến là danhsach ( với cấu trúc như trên )thì phải khai báo thế nào?
    Rồi khi dùng cấu trúc động thì mình truy cập vào từng biến kiểu gì, vẫn dùng danhsach[i].ten được không?
    nói thật sự mình học C với sách của thầy quách tuấn ngọc và thầy ất nhưng chưa hề nghe đến từ cấu trúc động......
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  4. #4
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    Trích dẫn Nguyên bản được gửi bởi goroshi Xem bài viết
    Ví dụ mình khai báo cấu trúc thế này
    PHP Code:
    typedef struct
    {
           
    char ten[30];
           
    int diem[2]; 
    }
    hocsinh
    Bây giờ mình muốn khai báo cấu trúc động với biến là danhsach ( với cấu trúc như trên )thì phải khai báo thế nào?
    Rồi khi dùng cấu trúc động thì mình truy cập vào từng biến kiểu gì, vẫn dùng danhsach[i].ten được không?
    Theo mình nghĩ chắc là bạn hỏi về cấp phát bộ nhớ động cho mảng cấu trúc danhsach. Việc cấp phát bộ nhớ động cho mảng cấu trúc cũng như các thao tác truy xuất tới các thành phần trong mảng cấu trúc đều giống với mảng thông thường. Có thể demo một đoạn code như sau:

    C Code:
    1. void main()
    2. {
    3.     int N;
    4.     hocsinh *danhsach;      /* khai bao bien con tro kieu hocsinh */
    5.  
    6.     printf("Nhap so hoc sinh: ");
    7.     scanf("%d%*c", &N);
    8.  
    9.     /* cap phat N vung nho kieu cau truc hocsinh */
    10.     danhsach = (hocsinh *) malloc(sizeof(hocsinh) * N);
    11.    
    12.     -------------------------------------
    13.     -------------------------------------
    Đúng như bạn nói, bạn vẫn có thể truy xuất đến các thành phần của mảng cấu trúc bằng cách danhsach[i].ten, danhsach[i].diem. Nói chung mổi phần tử danhsach[i] của mảng cấu trúc danhsach là một cấu trúc kiểu hocsinh.
    /* The thing that I think is the thing that I do. */

  5. #5
    Ngày gia nhập
    08 2008
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    nói thật sự mình học C với sách của thầy quách tuấn ngọc và thầy ất nhưng chưa hề nghe đến từ cấu trúc động......
    Sorry, là do mình mới đọc phần nên nhầm . Ý mình là cấp phát bộ nhớ động cho mảng danhsach theo cấu trúc trên.
    Thank mọi người cái

  6. #6
    Ngày gia nhập
    08 2008
    Bài viết
    1

    Mặc định Hỏi về cấu trúc động

    Trích dẫn Nguyên bản được gửi bởi Chautieu47 Xem bài viết
    Theo mình nghĩ chắc là bạn hỏi về cấp phát bộ nhớ động cho mảng cấu trúc danhsach. Việc cấp phát bộ nhớ động cho mảng cấu trúc cũng như các thao tác truy xuất tới các thành phần trong mảng cấu trúc đều giống với mảng thông thường. Có thể demo một đoạn code như sau:

    C Code:
    1. void main()
    2. {
    3.     int N;
    4.     hocsinh *danhsach;      /* khai bao bien con tro kieu hocsinh */
    5.  
    6.     printf("Nhap so hoc sinh: ");
    7.     scanf("%d%*c", &N);
    8.  
    9.     /* cap phat N vung nho kieu cau truc hocsinh */
    10.     danhsach = (hocsinh *) malloc(sizeof(hocsinh) * N);
    11.    
    12.     -------------------------------------
    13.     -------------------------------------
    Đúng như bạn nói, bạn vẫn có thể truy xuất đến các thành phần của mảng cấu trúc bằng cách danhsach[i].ten, danhsach[i].diem. Nói chung mổi phần tử danhsach[i] của mảng cấu trúc danhsach là một cấu trúc kiểu hocsinh.
    Post bài rồi mới thấy bài bạn này. Mình có chút thắc mắc, mình tưởng bộ nhớ động là khi mình nhập càng nhiều học sinh vào thì bộ nhớ được cấp phát càng rộng ra chứ. Sao lại phải khai báo số học sinh trước, thế thì nó có khác gì với bộ nhớ tĩnh đâu. Giải đáp hộ mình với, mình lại rối rồi

  7. #7
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    Tất nhiên vẫn có thể được. Làm theo dạng danh sách liên kết. Còn nếu là mảng cấu trúc thì phải nhập số học sinh N thôi. Lý do đã là mảng thì các phần tử của nó xếp cạnh nhau, như vậy ta mới có thể truy xuất tới các thành phần của nó được. Nếu như muốn mổi lần nhập thì mới cấp phát luôn thì chỉ có cách dùng danh sách liên kết, truy xuất thông qua con trỏ.
    /* The thing that I think is the thing that I do. */

  8. #8
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    À thông thường khi cấp phát bộ nhớ động cho mảng cấu trúc người ta vẫn phải nhập N. Khác với cấp phát tĩnh ở đây là mình cấp phát đúng N vùng nhớ cho nó chứ không phải khai báo 1 mảng với kích thước là một hằng số bất kỳ (thông thường sẽ lớn hơn số vùng nhớ thực tế sử dụng, gây lãng phí).
    /* The thing that I think is the thing that I do. */

  9. #9
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    C++ Code:
    1. danhsach = (hocsinh *) malloc(sizeof(hocsinh) * N);
    - Trong C không cần ép kiểu vì nó sẽ tự động ép hết qua void*. Nếu dùng C++ compiler thì mới nên ép kiểu thế này.
    - Cậu nên tập thói quen dùng malloc() với free().

  10. #10
    Ngày gia nhập
    08 2008
    Bài viết
    1

    Chậc, mình vẫn không sử dụng được, dịch nó vẫn báo lỗi, mọi người xem hộ khai báo cấu trúc động với cái hàm themhocsinh của mình với
    PHP Code:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct  
    {
        
    char ho_ten[30];
        
    float diem[10];
    }
    hocsinh;
    hocsinh *ds;
    ds=(hocsinh *)malloc(sizeof(hocsinh)*500);
    int a=0;
    void themhocsinh() //nó báo lỗi ở hàm này nên mình chỉ đưa hàm này ra thôi
    {
        
    int d=0;
        
    char hoten[30];
        
    float diemthi[10];
        do{
            
    printf("Nhap ho va ten\n");
            
    gets(hoten);
            if(
    strlen(hoten)==0)
                
    d=1;
            else{
                
    strcpy(ds[a].ho_ten,hoten);
                
    printf("Nhap so diem\n");
                
    scanf("%d",&ds[a].diem);
                
    a++;
            }
        }while(
    d!=1);

    Đã được chỉnh sửa lần cuối bởi goroshi : 02-09-2008 lúc 01:21 PM.

Các đề tài tương tự

  1. Trả lời: 0
    Bài viết cuối: 07-07-2013, 07:29 PM
  2. Bài tập về cấu trúc trong c | Cấu trúc sinh viên???
    Gửi bởi dddzzzjjjiii trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 14
    Bài viết cuối: 21-07-2012, 05:06 PM
  3. Chiếu trúc, Chiếu trúc cao cấp, Hàng Sản xuất tại Việt Nam: Giá rẻ nhất thị trường
    Gửi bởi tqt.tranquoctuan trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 13-05-2012, 08:33 PM
  4. cấu trúc bảng băm là cấu trúc như thế nào?
    Gửi bởi minh_quang1202 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 06-01-2011, 07:03 PM
  5. Cấu trúc file excel | Cấu trúc file xls. Giúp mình với?
    Gửi bởi knightofit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 02-04-2009, 10:44 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn