|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
到指针这里一直很懵,指针变量不是储存地址的吗,
#include<stdio.h>
int main()
{
char a[]="hello";
int b[]={0,1,2};
char*p=a;
int*q=b;
printf("p:%p b:%p\n",p,q);
printf("p=%s b=%d",p,*q);// p为什么%s可以输出hello,p不是地址吗?记得讲过*p才可以访问被指向的变量,数组和字符串(字符数组)有什么区别呢?
return 0;
}
感谢您的解答
char a[]="hello";
-------------------------------------------------------------------------------------------------------------
int b[]={0,1,2};
char*p=a;
int*q=b;
printf("p:%p b:%p\n",p,q);
printf("p=%s b=%d",p,*q);// p为什么%s可以输出hello,p不是地址吗?记得讲过*p才可以访问被指向的变量,数组和字符串(字符数组)有什么区别呢?
return 0;
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*p是访问被指向的变量,但是*p在这里的值是‘h’, 指的"hello"的第一个字母。
计算机里数组的首地址也就是第一个元素的地址就是整个数组的地址,第二个元素。。。最后一个元素地址,是可以通过第一个元素的地址加上偏移量来求得,这也是遵循高效率的原则
printf里的%s占位符,取得是整个字符数组的。所以要给它素组的首地址p. 但是要是硬给它个*p,得把%s换成%c
若是要求完整的答案,可以去看一下printf函数的源码。
|
|