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

Đề tài: Hỏi về mảng & pointer ?

  1. #1
    Ngày gia nhập
    11 2007
    Bài viết
    83

    Question Hỏi về mảng & pointer ?

    Hi all, mình mới học C nên trong qua trình đọc tài liệu + thực hành có thắc mắc, mong mọi người giải đáp giúp

    Mình có đoạn code sau :

    Code:
    #include<stdio.h>
    
    int main()
    {
    char word[10]="vietwow";
    char *p;
    p=word;
    printf("%c\n", *(p+5));
    }
    Đoạn code sau sẽ in ra ký tự thứ 6 trong mảng word (chứa chữ vietwow). Tuy nhiên mình có điều ko hiểu ở dòng :

    p=word;

    p là biến con trỏ, vậy tại sao lại ko có dấu & trước word ? Vậy ở đâu nó (biến con trỏ p) lấy cái gì của word ?
    nếu mình đổi lại vậy thì khi compile nó báo lỗi :

    Code:
    [root@server ~]# g++ -o char char.c
    char.c: In function âint main()â:
    char.c:7: error: cannot convert âchar (*)[10]â to âchar*â in assignment
    Nhưng nghĩ là cũng vô lý, vì ko thể chuyện lấy địa chỉ của nguyên mảng đưa vào biến con trỏ, chỉ có thể đưa địa chỉ của từng phần tử trong mảng vào biến con trỏ thôi. Vậy tại sao ?

    Mong mọi người giải thích giúp

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

    PHP Code:
    #include<stdio.h>

    int main()
    {

    char word[10]="vietwow";

    char *p;
    p=&word[0];
    printf("%c\n", *(p+5));

    return 
    0
    Mình sửa theo ý bạn rồi đó .
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

  3. #3
    Ngày gia nhập
    11 2007
    Bài viết
    83

    Trích dẫn Nguyên bản được gửi bởi thangit Xem bài viết
    PHP Code:
    #include<stdio.h>

    int main()
    {

    char word[10]="vietwow";

    char *p;
    p=&word[0];
    printf("%c\n", *(p+5));

    return 
    0
    Mình sửa theo ý bạn rồi đó .
    Hi thangit,

    Thực ra thì cách viết này mình biết rồi nhưng mình ko hiểu ở chỗ

    p=word;
    tương đương với
    p=&word[0];

    tức là p chỉ trỏ đến địa chỉ của phần tử đầu tiên trong mảng word => vậy nó chỉ có thể print ra chữ "v", tại sao nó vẫn có thể in các phần tử khác trong mảng (như chữ "o" ở vd trên) ?

    Thân,

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

    em đã xem kỹ lại và hiểu

    Thanx bác

  5. #5
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Không biết bạn hiểu chưa nhưng, đọc câu này của mình: "Mảng là còn trỏ hằng", kí hiệu * là kí hiệu con trỏ, còn [] là kí hiệu con trỏ hằng, bỏ 2 cái đi bạn sẽ được việc gán 2 còn trỏ, đó là nguyên nhận:

    Cả 3 TH này sẽ đúng:
    C Code:
    1. p=word; //gán 2 con trỏ
    2. p=&word[0]; //truyền địa chỉ cho con trỏ
    3. *p=word[0]; //gán giá trị

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

    Mặc định Hỏi về mảng & pointer ?

    Trích dẫn Nguyên bản được gửi bởi vietwow Xem bài viết
    Hi thangit,

    Thực ra thì cách viết này mình biết rồi nhưng mình ko hiểu ở chỗ

    p=word;
    tương đương với
    p=&word[0];

    tức là p chỉ trỏ đến địa chỉ của phần tử đầu tiên trong mảng word => vậy nó chỉ có thể print ra chữ "v", tại sao nó vẫn có thể in các phần tử khác trong mảng (như chữ "o" ở vd trên) ?

    Thân,
    vietwow thân mến. Trong C thì coi tên của mảng là 1 hẳng con trỏ trỏ đến thành phần đầu tiên của mảng
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  7. #7
    Ngày gia nhập
    01 2009
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi vietwow Xem bài viết
    Hi thangit,

    Thực ra thì cách viết này mình biết rồi nhưng mình ko hiểu ở chỗ

    p=word;
    tương đương với
    p=&word[0];

    tức là p chỉ trỏ đến địa chỉ của phần tử đầu tiên trong mảng word => vậy nó chỉ có thể print ra chữ "v", tại sao nó vẫn có thể in các phần tử khác trong mảng (như chữ "o" ở vd trên) ?

    Thân,
    tên của mảng ký tự (string) cũng chính là pointer trỏ đến phần tử đầu tiên của mạng. nên viết:

    p = word;
    hay
    p = &word[0];

    là như nhau
    Pete Haker Nguyễn
    Founder of LinuxForum: http://linuxforum.vn/diendan/

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

  1. Kỹ thuật C Con trỏ dạng **Pointer là gì ?
    Gửi bởi hungsao 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: 13-01-2011, 03:04 PM
  2. Gán giá trị của một pointer vào mảng
    Gửi bởi kenzso trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 02-01-2011, 04:47 PM
  3. bài tập về Pointer
    Gửi bởi kokujampo trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 05-05-2010, 10:32 AM
  4. Bài tập C | Bài tập về pointer
    Gửi bởi nguoingu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 03-05-2009, 02:25 PM
  5. Pointer
    Gửi bởi phanthanh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 01-08-2008, 08:50 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