เราเคยเห็นบางครั้งสร้างสตริงโดยใช้ 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