参考: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]); //0s1[0] = '6';printf("修改后s1[0] : %c\n", s1[0]); //6*(s1 + 1) = '0';printf("修改后s1[1] : %c\n", s1[1]); //0printf("修改后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)); //24printf("*ptr size : %d\n", sizeof(*ptr)); //8printf("ptr[1] value : %s\n", ptr[1]); //12345678printf("ptr[1]+1 value : %s\n", ptr[1]+1); //第二个子字符串,偏移1位,即2345678printf("*(&ptr[1]+1) value : %s\n", *(&ptr[1]+1)); //c8765432printf("*(&ptr[1]+1)+1 value : %s\n", *(&ptr[1]+1)+1); //第三个子字符串,偏移1位,即8765432return 0;
}
具体可以参考这篇文章:https://blog.csdn.net/m0_46606290/article/details/119787885