Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Ý nghĩa của các phương thức khai báo biến

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

    Red face Ý nghĩa của các phương thức khai báo biến

    Chào các anh chị đã có nhiều kinh nghiệm học C. Em mới học C dược khoảng 2 tuần, có một số cái không hiểu lắm xin được chỉ bảo.

    Như em học trong VB hay Java thì mỗi khi cần khai báo 1 biến, cùng lắm ta chỉ cần dùng :
    var x;
    hoặc là
    dim x

    Tại sao trong C lại có rất nhiều kiểu để khai báo một biến, ví dụ:

    #define x 100

    int x = 100;

    p = (int*)malloc(10*sizeof(int));

    register int x =100;

    ....v..v....

    Tất cả cùng chỉ là để khai báo 1 biến x với giá trị ban đầu 100. Có phải mỗi kiểu khai báo thì C sẽ điều khiển bộ nhớ làm việc theo một kiểu khác nhau?

    Em có quyển "Nhập môn lạp trình C" của thầy Lê Thanh Thủy nhưng không hề có nói khi nào phải dùng kiểu khai báo nào, ưu, nhược điểm của mỗi kiểu ra sao. (quả thực lập trình bằng VB ko bao giờ cần phải quan tấm những cái đó)

    Có phải do C là ngôn ngữ quá sơ khai nên LTV phải tự quản lý lấy những cái (có vẻ) rất là "nguyên thủy" như vậy?

    Ngoài ra, trong sách có nói đôi khi hàm malloc trả về NULL vì bộ nhớ không đủ cấp phát, tại sao không dùng khai báo biến như bình thường (int x=100) mà cứ phải dùng malloc hay calloc .... (nhỡ bộ nhớ không đủ thì chương trình bị gián đoạn à ?) ????

    Em mới học còn mông mụi , mong anh chỉ chỉ bảo giúp !!!!
    Tks a "not" !

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

    @hok_bik_zi: cái var này chắc là bên javascript đó

    @gadapchetvoi: Mỗi ngôn ngữ nó có một chuẩn và qui tắc riêng của nó. Bạn không thể làm khác được.

    Bên C/C++ hay bất kỳ một ngôn ngữ nào khác (ngoại trừ mấy script, và kiểu khai báo giống VB kia) thì khai báo biến bạn phải chỉ ra được kiểu của bạn đang dùng là gì để hệ điều hành cấp vùng nhớ cho nó. ví bạn dùng float thì 4 byte còn int (trong dos) thì 2 byte kích thước khác nhau nên chứa được dữ liệu khác nhau. (cái này là nguyên tắc tiết kiệm vùng nhớ và cho các compiler dễ xử lý hơn) ví phép + giữa 2 số kiểu int khác với phép cộng giữa 2 số thực.

  3. #3
    Ngày gia nhập
    12 2008
    Bài viết
    21

    @zkday2686 : em ko hỏi về các kiểu dữ liệu, mà hỏi về các cách khai báo biến hay là cấp phát bộ nhớ đó. Anh đọc kỹ giùm đc ko.

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

    à tại dài quá đọc lướt

    #define x 100 : cái này không phải là khai báo biến mà nói cho compiler biết chổ nào có x thì thay bằng giá trị 100 cho 'tui'. vậy thôi .

    int x = 100; : cái này là khai báo 1 biến với giá trị khởi tạo là 100.

    p = (int*)malloc(10*sizeof(int)); // cái này là xin cấp phát 1 dãy bộ nhớ 10 ô, một ô có kích thước là kích thước của int .

    register int x =100; // cái này là khai báo biến register nó sẽ không cấp trên vùng nhớ đơn thuần mà nó cấp trên vùng nhớ của thanh ghi nên làm việc nhanh hơn. (mỗi chương trình chỉ có 2 biến khai báo như này đầu tiên có ý nghĩa, các cái khác nếu có khai báo thì không có ý nghĩa của từ khóa register, tức các cái khác nó sẽ cấp trên vùng nhớ, không cấp trên thanh ghi )

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

    Nếu sau này em học C++ thì liệu có phải nhớ hết tất cả các cách khai báo biến & cấp phát bộ nhớ này?

    Có cách nào đơn giản và dễ hiểu hơn về việc tiếp cận bộ nhớ với C không ạ ?

    (VD: nếu cứ định nghĩa toàn bộ các biến một cách đơn giản như :
    int x=100; int Arr[1000];
    thì có sao không? Vì dùng malloc lại còn phải lo xem nó có trả về NULL ko thì mệt lắm)

  6. #6
    Ngày gia nhập
    01 2008
    Nơi ở
    UIT
    Bài viết
    129

    Mặc định Ý nghĩa của các phương thức khai báo biến

    Nếu sau này em học C++ thì liệu có phải nhớ hết tất cả các cách khai báo biến & cấp phát bộ nhớ này?

    Có cách nào đơn giản và dễ hiểu hơn về việc tiếp cận bộ nhớ với C không ạ ?

    (VD: nếu cứ định nghĩa toàn bộ các biến một cách đơn giản như :
    int x=100; int Arr[1000];
    thì có sao không? Vì dùng malloc lại còn phải lo xem nó có trả về NULL ko thì mệt lắm)
    Cái gì đã thuộc về syntax thì bắt buộc phải nhớ !

    Không như Java,.NET hay một số dynamic language như python, ruby, việc cấp phát bộ nhớ luôn luôn là động và được quản lí bởi máy ảo. Cấp phát động trong C/C++ được thực hiện kiểu thủ công bởi người lập trình vì vậy yêu cầu bạn phải nắm rõ syntax và sử dụng điêu luyện pointer nếu không thì có trời biết bạn sẽ gây ra việc gì :P

    Việc sử dụng cấp phát động bây giờ không còn quá quan trọng như ngày xưa nữa, vì bây giờ bộ nhớ của PC rất lớn nhưng trong các phần mềm cỡ photoshop, office mà ko dùng cấp phát động thì có lẽ ... không chạy nổi !

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

  1. Kỹ thuật C Cho em hỏi tý về khai báo biến và cách tính toán các kiểu dữ liệu
    Gửi bởi .sunshine. trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 20-08-2017, 09:40 PM
  2. Bài tập C khai báo biến
    Gửi bởi motminh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 04-01-2013, 11:25 AM
  3. taị sao các biến static khi khai báo để dùng được lại phải khai báo lại trước hàm main ? ?
    Gửi bởi anhnpson trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 15-06-2011, 08:18 PM
  4. Hướng dẫn cách khai báo biến
    Gửi bởi vanhieppro trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 26-05-2010, 06:00 PM
  5. Cho hỏi các kiểu khai báo biến
    Gửi bởi hi_shinichi trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 28-04-2010, 10:47 AM

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