参考:https://xiefor100.blog.csdn.net/article/details/52667734
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s1[] = "12345"; // "12345"在栈区,可以指针偏移读取和修改
char *s2 = "12345"; // "12345"在常量区,可以指针偏移读取,但是不能修改
char *ptr[]={"xxxxxxxx","12345678","c8765432"}; //不能定义为char **ptr,因为这个是表示一个指向指针的指针,但在这里它被赋值为一个字符串常量数组,这会导致类型不匹配的错误。
printf("s1[] size : %d\n", sizeof(s1)); //6 数组的大小
printf("修改前s1[0] : %c\n", s1[0]); //0
s1[0] = '6';
printf("修改后s1[0] : %c\n", s1[0]); //6
*(s1 + 1) = '0';
printf("修改后s1[1] : %c\n", s1[1]); //0
printf("修改后s1[]数组 : %s\n\n", s1);
printf("*s2 size : %d\n", sizeof(s2)); //8 指针的大小
printf("s2 value : %c\n\n", *(s2+1)); //2
//*(s2+1) = 6; //出错,不能修改
printf("ptr size : %d\n", sizeof(ptr)); //24
printf("*ptr size : %d\n", sizeof(*ptr)); //8
printf("ptr[1] value : %s\n", ptr[1]); //12345678
printf("ptr[1]+1 value : %s\n", ptr[1]+1); //第二个子字符串,偏移1位,即2345678
printf("*(&ptr[1]+1) value : %s\n", *(&ptr[1]+1)); //c8765432
printf("*(&ptr[1]+1)+1 value : %s\n", *(&ptr[1]+1)+1); //第三个子字符串,偏移1位,即8765432
return 0;
}
具体可以参考这篇文章:https://blog.csdn.net/m0_46606290/article/details/119787885