运行的结果为什么是7,我觉得运行的结果应该是0啊
看我分析的有错吗:①:调用fun("0ABCDEF"),将字符串传递给s[]
②:在fun函数里面,char *p=s; 指针变量p指向s[]数组中的首个元素0;所以*p等于0
③p-s=0-0 等于0,
请问大神我①②③中的哪里错了?
最近考计算机二级,麻烦神的详细讲解。(详解,最好向我这样①②③这样的)
代码如下:
#include<stdio.h>
int fun(char s[])
{
char *p=s;
while(*p!=0)
p++;
return (p-s);
}
main()
{
printf("%d\n",fun("0ABCDEF"));
}
我是这样看的,画一个内存的存储结构图就好了:
1.字符串”0ABCDEF“在内存中的存储格式,如下图所示,当调用fun函数时,语句*p=s,表示将s指向的内存地址赋给了指针p,此时指针p和s都指向了堆栈顶部的地址 0000 0001。
2.在判断while(*p!=0)中,具体是判断p指向的字符与数字0之间的比较,显然,只有当p指向"\0'时,这个while循环才会结束,此时p的地址为0000 0008,但是s的地址依然在0000 0001,具体如下图所示:
3.因此,当执行return时,p-s的值就是0000 0008 - 0000 0001,显然结果就是7了。
当然,具体的地址肯定不是如此,不过应该不影响理解的。
return (p-s) 为什么是7呢?
追答0 A B C D E F \0
0 1 2 3 4 5 6 7
最后的时候p指向7 7- 0等于多少?
①这里的s为什么是0呢? s是值为0吗?
②*p=s 怎么理解呢?