方式1:字符串指针(字符指针)
字符串指针展示
#include<stdio.h> int main(){ char * str= "中国"; printf("%s\n",str) return 0; }
- 定义一个字符串指针初始化或者先定义再赋值
- 打印时直接 打印地址 (而不是打印解引用)
- ps:用的中文字符举例(一般来说一个中文=两个字节)
- 还有一种样式 但是打印方式不同
字符指针展示
#include<stdio.h> int main(){ char* p ="你好中国"; printf("%c%c%c%c%c%c%c%c", *(p+4),*(p+5),*(p+6),*(p+7),*(p+0),*(p+1),*(p+2),*(p+3) ); return 0; }
- 上述打印时,使用的是解引用的方式
同类型字符串为数字内容的展示
#include<stdio.h> int main(){ char* p ="12345678"; printf("%c%c%c%c%c%c%c%c", *(p+0),*(p+1),*(p+2),*(p+3),*(p+4),*(p+5),*(p+6),*(p+7) ); printf("%c%c%c%c%c%c%c%c", *(p+4),*(p+5),*(p+6),*(p+7),*(p+0),*(p+1),*(p+2),*(p+3) ); return 0; }
(加了一份数字的 哪个好理解看哪个)
字符串指针和字符指针实际上是同一方式的不同叫法
总结一下:第一张图%s(%s是遇到\0就停止的)是直接打印字符串地址的方式 ,存放字符串,打印字符串地址(从头开始打印,直到结束字符串)
%s 对应 地址(指针)
第二张图%c是一个字符一个字符打印 ,使用解引用的方式,每个数字占一个字节,每次解引用打印一个数字,而且要求%c和字符串中元素是一一对应的。
%c 对应 解引用地址
方式2:字符数组
#include<stdio.h> int main(){ char str1[10]= {"01234567"}; //字符数组创建的第一种格式 char str2= {"01234567"}; //字符数组创建的第二种格式 char str3[10]= {'0','1','2','3','4','5','6','7'}; //字符数组创建的第三种格式 printf("%s\n",str1) printf("%s\n",str2) printf("%s\n",str3) return 0; }
#include<stdio.h> int main(){ char str1[10]= {"01234567"}; //字符数组创建的第一种格式 char str2= {"01234567"}; //字符数组创建的第二种格式 char str3[10]= {'0','1','2','3','4','5','6','7'}; //字符数组创建的第三种格式 printf("%c%c%c%c%c%c%c%c", str1[0],str1[1],str1[2],str1[3],str1[4],str1[5],str1[6],str1[7]); printf("%c%c%c%c%c%c%c%c", str2[0],str2[1],str2[2],str2[3],str2[4],str2[5],str2[6],str2[7]); printf("%c%c%c%c%c%c%c%c", str3[0],str3[1],str3[2],str3[3],str3[4],str3[5],str3[6],str3[7]); return 0; }
两个案例
第一个是打印数组首地址
%s 对应的是首地址(数组名)
第二个是通过数组下标打印单个字符(类似于解引用)
%c 对应数组下标(数组下标其实就是访问地址的一种方式)