Computer >> Máy Tính >  >> Lập trình >> lập trình C

Sự khác biệt giữa char s [] và char * s trong C

Chúng tôi đã thấy đôi khi các chuỗi được tạo bằng cách sử dụng char s [], hoặc đôi khi là char * s. Vì vậy, ở đây chúng ta sẽ xem có sự khác biệt nào hay chúng giống nhau?

Có một số khác biệt. S [] là một mảng, nhưng * s là một con trỏ. Ví dụ:nếu hai khai báo tương ứng như char s [20] và char * s, thì bằng cách sử dụng sizeof (), chúng ta sẽ nhận được 20 và 4. Khai báo đầu tiên sẽ là 20 vì nó cho thấy rằng có 20 byte Dữ liệu. Nhưng cái thứ hai chỉ hiển thị 4 vì đây là kích thước của một biến con trỏ. Đối với mảng, tổng chuỗi được lưu trữ trong phần ngăn xếp, nhưng đối với con trỏ, biến con trỏ được lưu trữ trong phần ngăn xếp và nội dung được lưu trữ tại phần mã. Và sự khác biệt quan trọng nhất là, chúng ta không thể chỉnh sửa chuỗi kiểu con trỏ. Vì vậy, đây là chỉ đọc. Nhưng chúng ta có thể chỉnh sửa biểu diễn mảng của chuỗi.

Ví dụ

#include<stdio.h>
main() {
   char s[] = "Hello World";
   s[6] = 'x'; //try to edit letter at position 6
   printf("%s", s);
}

Đầu ra

Hello xorld
Here edit is successful. Now let us check for the pointer type string.

Ví dụ

#include<stdio.h>
main() {
   char *s = "Hello World";
   s[6] = 'x'; //try to edit letter at position 6
   printf("%s", s);
}

Đầu ra

Segmentation Fault