User Tag List

+ Trả lời chủ đề
Trang 1/2 12 CuốiCuối
Hiện kết quả từ 1 tới 10 của 13

Chủ đề: Hỏi về con trỏ và ngăn xếp

  1. #1
    svBK's Member Avatar của Scarlet_rose
    Tham gia ngày
    Sep 2004
    Bài gửi
    85

    Mặc định Hỏi về con trỏ và ngăn xếp

    Khi viết các chương trình C/C++, em thấy rất hay nhắc tới khái niệm con trỏ nhưng em chẳng biết mấy tý về khái niệm này cả. Em có xem trong giáo trình Ngôn ngữ lập trình C của Quách Tuấn Ngọc thì cũng chỉ thấy nói có một chút xíu mà không ra đâu vào đâu cả ( có thể do em trình kém nên không hiểu được). Các bác có thể trình bày rõ ràng, cụ thể, tỷ mỷ hơn giúp em được không vì em thấy ứng dụng của con trỏ có vẻ như khá quan trọng thì phải? Em biết hỏi như thế thì chung chung quá nhưng thực sự em không biết gì về nó nên chẳng biết phải hỏi gì cả. THôi thì mọi người nói tất cả cho em vậy m28` m40`
    Còn nữa, khi giảng bài thầy em có nói đến khái niệm ngăn xếp (Stack) nhưng chỉ là đề cập đến các ứng dụng thôi chứ không giảng gì cả! Mọi người giải thích rõ hơn giúp em với nhé! Cám ơn mọi người nhiều!
    (Mọi người thông cảm, em mới học C được có 2 tuần nay thôi mà sắp thi mất rù ...hic..hic)
    Cứ đi rồi sẽ đến...

  2. #2
    FAL
    Guest

    Mặc định

    Quote Nguyên văn bởi Scarlet_rose
    Khi viết các chương trình C/C++, em thấy rất hay nhắc tới khái niệm con trỏ nhưng em chẳng biết mấy tý về khái niệm này cả. Em có xem trong giáo trình Ngôn ngữ lập trình C của Quách Tuấn Ngọc thì cũng chỉ thấy nói có một chút xíu mà không ra đâu vào đâu cả ( có thể do em trình kém nên không hiểu được). Các bác có thể trình bày rõ ràng, cụ thể, tỷ mỷ hơn giúp em được không vì em thấy ứng dụng của con trỏ có vẻ như khá quan trọng thì phải? Em biết hỏi như thế thì chung chung quá nhưng thực sự em không biết gì về nó nên chẳng biết phải hỏi gì cả. THôi thì mọi người nói tất cả cho em vậy m28` m40`
    Còn nữa, khi giảng bài thầy em có nói đến khái niệm ngăn xếp (Stack) nhưng chỉ là đề cập đến các ứng dụng thôi chứ không giảng gì cả! Mọi người giải thích rõ hơn giúp em với nhé! Cám ơn mọi người nhiều!
    (Mọi người thông cảm, em mới học C được có 2 tuần nay thôi mà sắp thi mất rù ...hic..hic)
    Theo em được biết thì con trỏ( pointer) là một biến dùng để lưu địa chỉ của một biến khác hay của một hàm. Con trỏ được khai báo như sau: (ten_kieu *) hay (ten_ham *), theo sau đó là tên biến dùng làm biến con trỏ. Con trỏ có thể trỏ tới một kiểu cấu trúc hay một hàm hay đơn giản là một biến kiểu int hay float.
    Muốn gán địa chỏ một biến cho con trỏ thì làm như sau:
    con_tro = &bien
    Muốn truy xuất giá trị tại địa chỉ mà con trỏ con_tro đang chỉ tới: *con_tro
    Ứng dụng của con trỏ theo em thì hình như khá là quan trọng. không biết mọi người như thế nào chứ em thì rất thường dùng con trỏ khi làm việc với C. Xin nói luôn trong C không có string mà chỉ có char. Và string được khai báo là mảng char kết thúc bằng '/0'. Mảng char đó củng là con trỏ
    x = mang_char[5] là tương đương với x = mang_char + 5 vì mang_char là pointer kiểu char trỏ tới địa chỉ của mang_char[0]

    Còn stack hay ngăn xếp thực ra là một vùng nhớ máy tính. khi học về Assambly thì stack là super quan trọng để lưu địa chỉ các thanh ghi và cờ nhớ. nhưng với C hay nhưng ngôn ngữ có hỗ trợ cấp phát bộ nớ động thì stack ít được quan tâm do C compiler đã tự lo phần cấp bộ nhớ.
    Về định nghĩa thì stack là một vùng nhớ sự trữ dành cho chương trình. bạn có thể thiết kế riêng một stack của mình bằng cách cấp bộ nhớ động

  3. #3
    Quân nhân danh dự Avatar của Mr.vulh_bk
    Tham gia ngày
    Dec 2003
    Bài gửi
    3.493

    Mặc định

    Quote Nguyên văn bởi Scarlet_rose
    Khi viết các chương trình C/C++, em thấy rất hay nhắc tới khái niệm con trỏ nhưng em chẳng biết mấy tý về khái niệm này cả. Em có xem trong giáo trình Ngôn ngữ lập trình C của Quách Tuấn Ngọc thì cũng chỉ thấy nói có một chút xíu mà không ra đâu vào đâu cả ( có thể do em trình kém nên không hiểu được). Các bác có thể trình bày rõ ràng, cụ thể, tỷ mỷ hơn giúp em được không vì em thấy ứng dụng của con trỏ có vẻ như khá quan trọng thì phải? Em biết hỏi như thế thì chung chung quá nhưng thực sự em không biết gì về nó nên chẳng biết phải hỏi gì cả. THôi thì mọi người nói tất cả cho em vậy m28` m40`
    Còn nữa, khi giảng bài thầy em có nói đến khái niệm ngăn xếp (Stack) nhưng chỉ là đề cập đến các ứng dụng thôi chứ không giảng gì cả! Mọi người giải thích rõ hơn giúp em với nhé! Cám ơn mọi người nhiều!
    (Mọi người thông cảm, em mới học C được có 2 tuần nay thôi mà sắp thi mất rù ...hic..hic)
    Theo mình thì những vấn đề như thế này bạn nên tham khảo sách trước khi hỏi mọi người.Quyển của Quách Tuấn Ngọc thì mình chưa đọc nhưng chắc là cũng không được kĩ lắm.Hồi xưa hay đọc quyển lập trình C và C++ của Phạm Văn Ất viết khá hay và đầy đủ !Tìm xem nhé !Hình như bây giờ không học môn cấu trúc dữ liệu và giải thuật mà học luôn C hay sao ý nhỉ ?Như thế là làm khó cho anh em rồi !

    The end is just the beginning

  4. #4
    HUT's Student Avatar của Jiggly
    Tham gia ngày
    May 2004
    Bài gửi
    295

    Mặc định

    Hix, chị nghĩ em nên đọc kĩ lại 1 số khái niệm cơ bản đi, nếu con trỏ mà vẫn chưa hiểu rõ thì dùng C/C++ chuối lắm. Cái này ko khó nhưng cần phải hiểu chính xác. Đọc quyển của bác Ất chị thấy khá là được, em có thể đọc quyển đó thay cho quyển của QTN, chị có đọc cả 2 quyển này và thấy quyển của bác Ất viết tốt hơn. À khuyên em nên kiếm thêm quyển Cấu trúc dữ liệu và thuật giải trong đó sẽ viết đầy đủ về các loại cấu trúc dữ liệu ví dụ như cái Stack em cần.
    <Ko biết có được là chị ko nhưng mà tranh thủ cái ^_^>


    A Better Day, Another Way


  5. #5
    svBK's Member Avatar của TheHaNoi
    Tham gia ngày
    Oct 2004
    Bài gửi
    59

    Mặc định

    BAc jijly cho em hoi cai :Co ham nao (xu ly XAu) de xoa 1 ki tự bat kì trong xâu khong.Neu khong co bác viet giup em cai.

  6. #6
    svBK's Member Avatar của TheHaNoi
    Tham gia ngày
    Oct 2004
    Bài gửi
    59

    Mặc định

    Em gán = kí tự trang thi thay toàn bộ phàn ve sau biên mất

  7. #7
    HUT's Student Avatar của Jiggly
    Tham gia ngày
    May 2004
    Bài gửi
    295

    Mặc định

    Đây, của chú đây, viết trường hợp tổng quát luôn. Nói chung các bài toán về xâu ko quá phức tạp chỉ cần hiểu đúng về con trỏ cũng như khái niệm xâu trong C là có thể làm được ^_^. Nếu muốn, chú có thể vứt cái code của chú lên đây để các bác ở đây cùng xem và sẽ giải thích cho chú tại sao nó chạy ko đúng. Vì bài toán rất đơn giản nên chắc ko cần phải giải thích gì thêm, đọc code là hiểu ngay.
    Mã:
    #include "string.h"
    char* strdels(char* s,int i, int n) 
    // xóa n kí tự bắt đầu từ chỉ số i trong xâu s 
    {
    int len=strlen(s);
    s[i]='\0';
    if ((i+n)<=len) strcat(s,s+(i+n)*sizeof(char));
    return s;
    }
    Lần sửa cuối bởi Jiggly; 03-11-2004 lúc 10:16 PM

  8. #8
    du_nhat_bkf
    Guest

    Mặc định

    đọc quyển của nguyễn thanh Thủy xong bạn sẽ hiểu thế nào là con trỏ

  9. #9
    svBK's Member Avatar của TheHaNoi
    Tham gia ngày
    Oct 2004
    Bài gửi
    59

    Mặc định

    Quote Nguyên văn bởi Jiggly
    Đây, của chú đây, viết trường hợp tổng quát luôn. Nói chung các bài toán về xâu ko quá phức tạp chỉ cần hiểu đúng về con trỏ cũng như khái niệm xâu trong C là có thể làm được ^_^. Nếu muốn, chú có thể vứt cái code của chú lên đây để các bác ở đây cùng xem và sẽ giải thích cho chú tại sao nó chạy ko đúng. Vì bài toán rất đơn giản nên chắc ko cần phải giải thích gì thêm, đọc code là hiểu ngay.
    Mã:
    #include "string.h"
    char* strdels(char* s,int i, int n) 
    // xóa n kí tự bắt đầu từ chỉ số i trong xâu s 
    {
    int len=strlen(s);
    s[i]='\0';
    if ((i+n)<=len) strcat(s,s+(i+n)*sizeof(char));
    return s;
    }
    BAi cua em thế này nè:
    {
    nhập xâu ki tự;
    .................
    for(i=0;i<=strlen(xau ki tự đó);i++)
    if(i=(giá trị muốn gán)) s[i]='\0';
    }
    Tức là em muốn thay phần tử thứ i đó băng ki tự trống....Thế mà sau khi nhạp vao xâu thì từ phần tử thứ i đó trở về sau các ki tự đều là trống.
    Giúp em chỉ ra cái sai????????????CÁm on các bác

  10. #10
    du_nhat_bkf
    Guest

    Mặc định

    to mọi người và chú thehanois co bài đếm số lần xuất hiện của các từ này ,
    trên lí thuyết thì quá ổn, nhưng máy nó lại không chạy cho, anh em thử tìm lỗi xem

    #include <stdio.h>
    #include <string.h>

    char *str;
    struct wl
    {
    char word[20];
    int time;
    } wlist[30];

    void main()
    {
    char s[80];
    int len;
    int k=0,i=0;

    printf(" Nhap xau : ");
    gets(s);
    str=s;
    strupr(str);
    len=strlen(str);
    while (len>0)
    {

    //find new word!
    int j=0;

    //nhay qua dau cach, trang, newline
    char *word,*check;
    while ( (str[i]==' ' || str[i]=='\n' || str[i]=='\t') && (i<len) )
    ++i;
    word="";


    //ghi cac tu vao dia chi cua word
    while (str[i]!=' ' && str[i]!='\n' && str[i]!='\t' && i<len)
    {
    *(word+j*sizeof(char))=str[i];
    ++j;
    ++i;
    }
    *(word+j*sizeof(char))='\0';
    if (i>len)
    break;

    //write this word into wordlist
    ++k;
    strcpy(wlist[k].word,word);
    wlist[k].time=1;
    str+=i*sizeof(char);

    //how many times this word appear in the string
    check=strstr(str,word);
    while (check!=NULL)
    {
    ++wlist[k].time;
    str += strlen(word)*sizeof(char);
    check=strstr(str,word);
    }
    }
    printf("\n in ra: ");
    for(i=1;i<=k;++i)
    printf("%s %d \n",wlist[i].word,wlist[i].time);

    }

+ Trả lời chủ đề
Trang 1/2 12 CuốiCuối

Thông tin chủ đề

Users Browsing this Thread

Hiện có 1 người đọc bài này. (0 thành viên và 1 khách)

Chủ đề tương tự

  1. Vượt qua ngăn cách giữa thế giới tương tự và số.
    Gửi bởi nothingtolose trong mục Diễn đàn Học tập và Nghiên cứu KH Sinh viên
    Trả lời: 2
    Bài cuối: 14-06-2005, 06:51 PM

Từ khóa (Tag) của chủ đề này

Quyền viết bài

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


About svBK.VN

    Bách Khoa Forum - Diễn đàn thảo luận chung của sinh viên ĐH Bách Khoa Hà Nội. Nơi giao lưu giữa sinh viên - cựu sinh viên - giảng viên của trường.

Follow us on

Twitter Facebook youtube