你好:
答案选C 7。
因为fun函数传递一个数组(在此可看做一个指针),然后在main里传递“0ABCDEF”字符串,相当于一个数组,然后fun函数里先为指针p赋值,它指向数组的首元素字符“0”,然后while里*p!=0先取指针p所指向的值,然后判断是否为0,条件为真时p这个指针地址加1,当越过数组边界时,就是F的下一个元素时,此时地址里边没有元素,为数字“0”,所以退出while。
返回值是p地址减去s地址,注意,不是p所指地址里的值减去s地址里的值,仅仅只是地址相减。
希望我的回答能帮助到你。
输出的是字符串长度,应该是7
fun函数的形参看似是字符数组char s[],实际是char *s,c语言里数组名的本质是指针,所以函数里可以声明char *p=s
这是p和s其实都指向内存里的同一个地址、然后while循环的作用是让p指向这个字符数组的最后一个字符、由于字符串都是已尾零结尾的(即最后一个字符是 \0)所以当读到尾零的时候跳出while循环,最后return的p-s就是字符个数了
指正相减是这样算的:(p-s)/sizeof(char) 这里的char是指针的基类型
函数形参为char s[],是字符数组
char *p = s;声明字符指针p,并初始化为指向字符数组第一个元素O
在指针p未到达字符数组结尾‘\0’之前,使p指针自增一
循环结束,p指向F后一个元素‘\0’
函数返回值为偏移量p-s=(x+7)-X = 7
OABCDEF\0
0 1 2345 6 7【相对偏移量】
这是求一个字符串长度的函数