|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
int main()
{
char a[]="I love you ",b[40],*p1,*p2;
int i;
p1=a; 这里赋值的时候指针不用带*
p2=b;
for(;*p1!='\0';p1++,p2++) 而这里p1又带个*是啥意思?
{
*p2=*p1; 这里赋值为什么要带个*号赋值?
}
p2='\0';
printf("a:%s\n",a);
printf("b:");
for(i=0;b[i]!='\0';i++) 上面b已经赋值了p2为啥输出还要遍历一遍?直接跟上面的p2可以不?
{
printf("%c",b[i]);
}
printf("\n");
}
1.为什么p1=a和p2=b赋值为什么不带*
这里的a和b都是数组变量,所谓数组变量,实际上就是指针变量,数组变量的地址指向数组的第一个值
所以,这里只是将指针地址赋给指针,当然可以
2.为什么*p1!='\0'又带个*是啥意思
这里的意思是如果p1所指向的地址的值不为'\0',则继续执行循环
如果不加*号的话,p1!='\0'的意思是p1这个指针所指向的地址不为'\0'的话,则继续执行循环
地址怎么可能为'\0'呢,所以应写成*p1!='\0'
3.*p2=*p1为什么要带个*号赋值
这里的意思是将p1这个指针所指向的地址的值赋值给p2这个指针所指向的地址的值
如果不加*号的话,p2=p1的意思是让p2这个指针指向p1所指向的地址,意思都变了
4.上面b已经赋值了p2为啥输出还要遍历一遍?直接跟上面的p2可以不?
不可以
p2是一个指针变量,在for循环之后你就将p2指向了0地址('\0'会被编译器认为是0地址)
你要是使用p2的话,你的程序会直接被操作系统终止掉
|
|