Mẹo nhỏ: Để tìm kiếm chính xác các tác phẩm của Phebinhvanhoc.com.vn, hãy search trên Google với cú pháp: "Từ khóa" + "phebinhvanhoc". (Ví dụ: tác phẩm chí phèo phebinhvanhoc). Tìm kiếm ngay
382 lượt xem

Sự khác biệt giữa char s [] và char s là gì?

Bạn đang quan tâm đến Sự khác biệt giữa char s [] và char s là gì? phải không? Nào hãy cùng PHE BINH VAN HOC theo dõi bài viết này ngay sau đây nhé!

Video đầy đủ Sự khác biệt giữa char s [] và char s là gì?

bản nháp c99 n1256

Có hai cách sử dụng khác nhau của các ký tự chuỗi:

  1. start char []:

    điều này “kỳ diệu hơn” và được mô tả trong “khởi tạo” 6.7.8 / 14:

    một mảng các kiểu ký tự có thể được khởi tạo thành một chuỗi ký tự, tùy chọn được đặt trong dấu ngoặc nhọn. các ký tự liên tiếp trong chuỗi ký tự theo nghĩa đen (bao gồm ký tự null kết thúc nếu có khoảng trắng hoặc nếu mảng có kích thước không xác định) khởi tạo các phần tử của mảng.

    vì vậy đây chỉ là một phím tắt để:

    Giống như bất kỳ mảng thông thường nào khác, c có thể được sửa đổi.

    ở mọi nơi khác: tạo:

    • ẩn danh
    • mảng các ký tự được nhập trong chuỗi c và c ++ là gì?
    • với bộ nhớ tĩnh
    • cung cấp ub nếu được sửa đổi

    vì vậy khi bạn nhập:

    điều này tương tự như:

    lưu ý việc chuyển đổi ngầm định từ char [] sang char *, điều này luôn hợp pháp.

    vì vậy nếu bạn sửa đổi c [0], bạn cũng sửa đổi __unname, là ub.

    điều này được ghi lại trong 6.4.5 “chuỗi”:

    5 Trong giai đoạn dịch 7, một byte hoặc mã có giá trị 0 được thêm vào mỗi chuỗi ký tự nhiều dòng kết quả của một chuỗi ký tự hoặc chuỗi ký tự theo nghĩa đen. sau đó, chuỗi ký tự nhiều byte được sử dụng để khởi tạo một mảng thời lượng và độ dài lưu trữ tĩnh đủ để giữ chuỗi. đối với chuỗi ký tự, các phần tử của mảng có kiểu char và được khởi tạo bằng các byte riêng lẻ của chuỗi nhiều dòng […]

    6 không xác định liệu các mảng này có khác biệt hay không miễn là các phần tử của chúng có giá trị phù hợp. nếu chương trình cố gắng sửa đổi một mảng như vậy, hành vi đó là không xác định.

    6.7.8 / 32 “khởi tạo” cung cấp một ví dụ trực tiếp:

    ví dụ 8: câu lệnh

    xác định các đối tượng mảng ký tự “đơn giản” s và t có các phần tử được khởi tạo bằng các ký tự chuỗi.

    câu lệnh này giống hệt với

    nội dung của các mảng có thể sửa đổi được. mặt khác, khai báo

    định nghĩa p với kiểu “con trỏ tới char” và khởi tạo nó để trỏ đến một đối tượng kiểu “mảng char” có độ dài 4 có các phần tử được khởi tạo thành một chuỗi ký tự theo nghĩa đen. nếu bạn cố gắng sử dụng p để sửa đổi nội dung của mảng, hành vi đó là không xác định.

    triển khai elf gcc 4.8 x86-64

    chương trình:

    biên dịch và dịch ngược:

    đầu ra chứa:

    kết luận: gcc lưu trữ ký tự * nó trong phần .rodata, không phải trong .text.

    nếu chúng ta làm tương tự với char []:

    chúng tôi nhận được:

    để nó được lưu trữ trên ngăn xếp (liên quan đến% rbp).

    Tuy nhiên, lưu ý rằng tập lệnh liên kết mặc định đặt .rodata và .text trong cùng một phân đoạn, được thực thi nhưng không có quyền ghi. điều này có thể được nhìn thấy với:

    bao gồm:

    XEM THÊM:  Ứng dụng 3uTools là gì? Công cụ này có gì đặc biệt

    Như vậy trên đây chúng tôi đã giới thiệu đến bạn đọc Sự khác biệt giữa char s [] và char s là gì?. Hy vọng bài viết này giúp ích cho bạn trong cuộc sống cũng như trong học tập thường ngày. Chúng tôi xin tạm dừng bài viết này tại đây.

    Website: https://phebinhvanhoc.com.vn/

    Thông báo: Phê Bình Văn Học ngoài phục vụ bạn đọc ở Việt Nam chúng tôi còn có kênh tiếng anh PhebinhvanhocEN cho bạn đọc trên toàn thế giới, mời thính giả đón xem.

    Chúng tôi Xin cám ơn!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *