自主学习char数组 在*p=s,和*p=&s的区别

研究一下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

目前为止没有发现区别,只知道一个是数组的首地址,一个是数组的地址

但是测试效果一样 萌新第一次发帖,还请大佬多多包涵,如有问题,请多多赐教。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值