Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 23 kết quả

Đề tài: sự khác biệt giữa char* với char**là gì ?

  1. #1
    Ngày gia nhập
    10 2008
    Nơi ở
    đại học vinh
    Bài viết
    283

    Mặc định sự khác biệt giữa char* với char**là gì ?

    ý nghĩa câu hỏi chính là tiêu đề trên. mình đang thắc mắc vấn đề này nhờ mọi người giúp đở tí

  2. #2
    Ngày gia nhập
    07 2010
    Nơi ở
    HN
    Bài viết
    167

    theo mình hiểu thì 1 cái là mảng ký tự 1 cái là mảng chuỗi .

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

    x* a
    a là 1 con trỏ có khả năng trỏ vào 1 phần tử có kiểu dữ liệu là x

    chú ý điều này nhé
    khi mà cái nó trỏ đến là ô nhớ đầu tiên của 1 cái dãy các phần từ liên tiếp thì ta coi nó là trỏ đến
    thì ta coi nó là trỏ đến 1 mảng

    nếu vậy khi x lại là 1 con trỏ thì sao
    x= y*
    vậy sẽ là
    y** a
    vậy a sẽ trỏ đến 1 biến có dạng (y*) hoặc 1 mảng có dạng y*



    chú ý thêm . con trỏ cũng chỉ là 1 biến 32bit mà thôi, chả có gì đặc biệt cả
    v
    ^_,^

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

    Bùi Tấn Quang

  4. #4
    Ngày gia nhập
    08 2010
    Nơi ở
    Moscow, Russia Federation
    Bài viết
    913

    Một cái là char có 1 dấu * và một cái là char có 2 dấu *, em mới học nên cũng chỉ biết vậy thôi. Ví dụ:
    PHP Code:
    int main (int argcchar argv[], char envp[])  {
            return 
    0;

    À, các anh các chị cho em hỏi char *argv[] và char ** argv có khác nhau như thế nào với ạ?
    Mời các bạn ghé thăm blog cá nhân của tôi

  5. #5
    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 mp121209 Xem bài viết
    Một cái là char có 1 dấu * và một cái là char có 2 dấu *, em mới học nên cũng chỉ biết vậy thôi. Ví dụ:
    PHP Code:
    int main (int argcchar argv[], char envp[])  {
            return 
    0;

    À, các anh các chị cho em hỏi char *argv[] và char ** argv có khác nhau như thế nào với ạ?
    theo ngu kiến của tớ thì nó thế này

    1. ở tiêu đề của hàm thì a[] hay *a thì nó ko quan tâm
    ham(int []);

    ham (int *);
    chả khác nhau tí gì cả
    chứng minh thì có thể như này
    PHP Code:
    void ham(int []);
    {
    //làm gì đó
    }


    .....
    int *a;
    //cấp phát
    ham(a);
    thì cái làm gì đó vẫn được thực hiện 
    hoặc vô vàn chứng minh khác

    lý do thì cực kì loằng ngoằng :
    hàm trong C nó ko quan tâm đến [] hay * vì đằng nào nó cũng xin ô nhớ khác rồi copy giá trị từ tham số vào ô nhớ đó, nên dù [] , hay * thì nó vẫn còn như là 1 dạng chung *, cũng chỉ là 1 cái biến 32 bit mà thôi, chả có gì đặc biệt cả



    ===>2. .....chắc ko cần nói nữa nhỉ
    ^_,^

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

    Bùi Tấn Quang

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

    Mặc định sự khác biệt giữa char* với char**là gì ?

    ý quên, bổ xung thêm là
    còn 1 lý do nữa
    dù int a[]
    hay *a thì
    a ở đây đều rõ ràng : cách phép toán với a đều dã được xác định chính xác oy, nên ko thay đổi
    ^_,^

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

    Bùi Tấn Quang

  7. #7
    Ngày gia nhập
    09 2010
    Bài viết
    17

    theo mình thì char* là con tro tro đến vùng nhớ kiểu char
    char* 100 là con trỏ trỏ đến vùng nhớ 1 co 100 ô nhớ kiểu char
    char** thì mình không biết
    có gì sai mong mọi người chỉ giáo nhiệt tình nha

  8. #8
    Ngày gia nhập
    09 2010
    Nơi ở
    Hà Nội
    Bài viết
    381

    Trích dẫn Nguyên bản được gửi bởi hathetrinh Xem bài viết
    theo mình thì char* là con tro tro đến vùng nhớ kiểu char
    char* 100 là con trỏ trỏ đến vùng nhớ 1 co 100 ô nhớ kiểu char// cái này sai
    phải là char* p = (char*)malloc(100);
    thế mới là con trỏ trỏ đến vùng nhớ có 100 ô kiểu char.
    char** thì mình không biết
    có gì sai mong mọi người chỉ giáo nhiệt tình nha
    char* là con trỏ trỏ đến 1 vùng nhớ kiểu char.
    còn char** là con trỏ trỏ đến con trỏ char*
    theo mình hiểu là như thế!

    skype: hvphu2010
    Yahoo: hvphu2010
    Sdt: 0129 609 4567

  9. #9
    Ngày gia nhập
    08 2010
    Nơi ở
    Moscow, Russia Federation
    Bài viết
    913

    Vừa mới lên hỏi thầy giáo về, chẳng biết có hiểu đúng ý thầy hay không. Thầy mới đi công tác nước ngoài về nên nói tiếng Anh, tiếng Nga lẫn lộn đoạn được đoạn mất chẳng biết mình có hiểu đúng ý ông ấy không nữa. Đại khái là thế này.
    Trước hết là đồng ý với những lời của langman.
    Nếu dùng char *str; thì khi xin cấp phát vùng nhớ, vùng nhớ không đơn giản chỉ là một dãy ô nhớ, mà nó còn được quản lý bởi một header, trong header chứa đầy đủ về thông số về kích thước, vị trí của các ô nhớ. Vì thế khi giải phóng vùng nhớ đã được cấp phát bằng lệnh delete, chương trình sẽ đọc các thông số về vùng nhớ đã được cấp phát trong header này, rồi tiến hành ...
    Nếu dùng char [n] thì đơn giản là một vùng nhớ n ô nhớ được cấp phát cho mục đích sử dụng của ta. Tùy vào biến cục bộ(local), toàn cục(global), biến tĩnh(static) hay ... mà phạm vi truy xuất và thời gian tồn tại của vùng nhớ cũng khác nhau. Khi thoát khỏi phạm vi nhìn thấy(visible scope), những ô nhớ này sẽ tự động được giải phóng(automatically).
    Các bác cao nhân xem hộ em xem hiểu như thế này có đúng không, có gì bổ sung cho em hiểu bản chất cái vấn đề này với.
    Còn một vấn đề nữa là delete str; hay delete [] str; cũng mong mọi người làm rõ giúp
    Thanks so much!
    Mời các bạn ghé thăm blog cá nhân của tôi

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

    1. more cho các bạn mới tham gia topic :
    ko phải lúc nào [] và * là tương đương nhau đâu
    cái langman nói chỉ là 1 th nhỏ xíu trong các vấn đề với con trỏ đó là [] và * ở trong tiêu đề của hàm
    chú ý ở đây chỉ có 1 [] nhé
    vì sao thế ? vì nếu a[][] thì con trỏ này thuộc dạng unsafe hoàn toàn chưa có khả năng xác định các phép toán với nó, ví dụ + 1, -2, ++ -- thì máy sẽ làm như nào ???????? nên
    hoàn toàn ko có a[][] tương đương với **a trong lời gọi hàm
    đúng như mp nói trong lời gọi hàm là thế, còn những chỗ khác lại ko còn như thế nữa

    2. @ mp:
    PHP Code:
    delete strhay delete [] str
    trước đây R_R đã chỉ ra 2 cái này khác nhau hoàn toàn oy, nhưng mà langman ko nhớ nó ở topic nào nữa
    nếu mình dùng với built-in * thì ko vấn đề đâu, int *, char *
    nhưng đối với user-defined class * thì có khá nhìu vấn đề đấy

    khả năng automatic thì có chăng đến từ trình biên dịch mà thôi chứ C++ syntax thì ko có,

    anh R_R có vài ví dụ ở 4rum oy mà kẻ đầu đất này (langman) ko nhớ nó ở cái topic nào nữa, hồi đó quên ko bookmark vô
    ^_,^

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

    Bùi Tấn Quang

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

  1. Lập trình C Gặp lỗi error C2440: '=' : cannot convert from 'char *' to 'char [50]'
    Gửi bởi Hades_Huynh 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: 21-11-2013, 01:38 PM
  2. Tìm SV theo tên trong DSLK đơn, lỗi invalid conversion from `char' to `const char*'
    Gửi bởi dk411 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 02-11-2011, 01:55 PM
  3. Lỗi của kiểu dữ liệu Char và cách nhập giá trị nguyên vào biến Char?
    Gửi bởi fcbik58 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: 08-08-2011, 11:27 AM
  4. Bài tập C ham timkiem thông báo lổi:invalid conversion from `char' to `const char*'
    Gửi bởi weboys 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: 22-05-2011, 09:45 PM
  5. string, char, Unicode char trong VC++
    Gửi bởi TQN trong diễn đàn Tutorials và Thủ thuật Visual C++
    Trả lời: 2
    Bài viết cuối: 09-03-2010, 01:35 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