Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ความแตกต่างระหว่าง char s[] และ char *s ใน C


เราเคยเห็นบางครั้งสร้างสตริงโดยใช้ char s[] หรือบางครั้ง char *s ทีนี้มาดูกันว่ามีความแตกต่างกันอย่างไร?

มีความแตกต่างบางอย่าง s[] คืออาร์เรย์ แต่ *s เป็นตัวชี้ ตัวอย่างเช่น หากการประกาศสองครั้งเป็นเหมือน char s[20] และ char *s ตามลำดับ โดยใช้ sizeof() เราจะได้ 20 และ 4 อันแรกจะเป็น 20 เนื่องจากแสดงว่ามี 20 ไบต์ ของข้อมูล แต่อันที่สองแสดงเพียง 4 เนื่องจากเป็นขนาดของตัวแปรพอยน์เตอร์หนึ่งตัว สำหรับอาร์เรย์ สตริงทั้งหมดจะถูกเก็บไว้ในส่วนของสแต็ก แต่สำหรับตัวชี้ ตัวแปรตัวชี้จะถูกจัดเก็บไว้ในส่วนของสแต็ก และเนื้อหาจะถูกเก็บไว้ที่ส่วนของโค้ด และความแตกต่างที่สำคัญที่สุดก็คือ เราไม่สามารถแก้ไขสตริงประเภทตัวชี้ได้ นี่เป็นแบบอ่านอย่างเดียว แต่เราสามารถแก้ไขการแสดงอาร์เรย์ของสตริงได้

ตัวอย่าง

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

ผลลัพธ์

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

ตัวอย่าง

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

ผลลัพธ์

Segmentation Fault