研究一下char s[100],在*p=s,和*p=&s的区别
首先定义了一段函数
char s[100]="1234567489";
为了方便测试我们接下来把*p=s,和*p=&s写为*p和*q
第一步测试一下主函数在%s和%c的区别
printf("这是百分号s输出和s得到的结果 %s\n",s);
printf("这是百分号c输出和s[5]得到的结果 %c\n",s[5]);
我发现%s是输出一整个字符,而%c则是当前位置的值
接下我们定义代码
char *p=s;
同样的我们进行%s和%c的实验
printf("这是百分号s输出和p得到的结果 %s\n",p);
printf("这是百分号c输出和p[5]得到的结果 %c\n",p[5]);
printf("这是百分号s输出和p[5]得到的结果 %s\n",p[5]);
结果如下
说明以百分号s输出和p[5]得到的结果不存在
到此我突然想到p+5输出会是什么样子,那不妨我们来试一下
当然我们还是%s和%c来测试
printf("这是百分号s输出和p+5得到的结果 %s\n",p+5);
printf("这是百分号c输出和p+5得到的结果 %c\n",p+5);
实验结果如下
很明显 %c输出的p+5是没有值得但是这次的执行速度比上次快了很多
那么我想*p=s,p[n]和p+n(n指自然数) 的结果我想就是以上情况了接下来我们进行
*q=&s
定义如下
char*q=&s;
当然编译器也显示了一串[警告] initialization of 'char *' from incompatible pointer type 'char (*)[100]' [-Wincompatible-pointer-types] 应该是说的不兼容的指针类型;
我们不管我们还是普通的输出一下
printf("这是百分号s输出和s得到的结果 %s\n",s);
printf("这是百分号s输出和q得到的结果 %s\n",q);
结果上是没有什么问题的
那么我们继续刚刚的测试看一下q[5],q+5有什么区别
printf("这是百分号c输出和q[5]得到的结果 %c\n",q[5]);
printf("这是百分号s输出和q[5]得到的结果 %s\n",q[5]);
实验结果如下,目前为止和上面表现一样
实验结果百分号s输出和q[5]得到的结果是不存在的\n);
我们继续测试
printf("这是百分号s输出和q+5得到的结果 %s\n",q+5);
printf("这是百分号c输出和q+5得到的结果 %c\n",q+5);
结果如下
显然和上面的结果一致 实验百分号c输出和q+5得到的结果是不存在的
最后值得一提的是
printf("这是百分号s输出和p+5得到的结果 %s\n",*(q+5));//或者是*(q+5)
这句话是不存在的然而
printf("这是百分号c输出和*(p+5)得到的结果 %c\n",*(q+5));//或者是*(q+5)
这句话等同于上面的p[5]或者是q[5]
这是全代码
#include<stdio.h>
int main (){
char s[100]="1234567489";
char *p=s;
printf("s[100]=1234567489\n");
printf("这是百分号s输出和s得到的结果 %s\n",s);
printf("这是百分号c输出和s[5]得到的结果 %c\n",s[5]);
printf("///分隔符/\n");
printf("char *p=s\n");
printf("这是百分号s输出和p得到的结果 %s\n",p);
printf("这是百分号c输出和p[5]得到的结果 %c\n",p[5]);
printf("实验结果百分号s输出和p[5]得到的结果是不存在的\n");
printf("这是百分号s输出和p+5得到的结果 %s\n",p+5);
printf("实验结果百分号c输出和p+5得到的结果是不存在的\n");
printf("///分隔符/\n");
char*q=&s;
printf("char *q=&s\n");
printf("这是百分号s输出和q得到的结果 %s\n",q);
printf("这是百分号c输出和q[5]得到的结果 %c\n",q[5]);
printf("实验结果百分号s输出和q[5]得到的结果是不存在的\n");
printf("这是百分号s输出和q+5得到的结果 %s\n",q+5);
printf("实验结果百分号c输出和q+5得到的结果是不存在的\n");
printf("///分隔符/\n");
printf("这是百分号s输出和*(q+5)或者是*(q+5)得到的结果不存在\n");
printf("这是百分号c输出和*(q+5)或者是*(q+5)得到的结果等同于q[5],p[5]\n");
return 0;
}
说说收货,解决了自己很久的一个问题,原来%s输出只会是一串,而%c的输出是一个单一的字符,即数组下标对应位置的字符,但是有个疑问如何从第几位开始输出直到结束目前还是没有学会,比如从第二位开始输出到最后,得到结果34567489
目前为止没有发现区别,只知道一个是数组的首地址,一个是数组的地址
但是测试效果一样 萌新第一次发帖,还请大佬多多包涵,如有问题,请多多赐教。