c语言问题,这道题看不懂

来源:百度知道 编辑:UC知道 时间:2024/06/03 05:42:59
下列程序,fun()函数的功能是:在字符串str中找出ASCII码值最小的字符并排在第一位,并将该字符前的原字符向后顺序移动.例如调用fun()之前给字符串输入fagAgBDh,调用后字符串中的内容为AfaggBDh.
看下列程序:
#include<stdio.h>
void fun(char *p)
{
char min,*q;
int i=0;
min=p[i];
while(p[i]!=0)
{
if(min>p[i])
{
q=p+i;
min=p[i];
}
i++;
}
while(q>p)
{*q=*(q-1);
q--;
}
p[0]=min;
}
main()
{
char str[80];
printf("Enter a string :");
gets(str);
printf("\nThe original string:");
puts(str);
fun(str);
printf("\nThe string after moving:");
puts(str);
printf("\n\m");
}
这个程序q=p+i是什么意思,p原来是多少?

q=p+i就是将q指向p的第i个元素,p的值就是p第0个元素的地址,+i就是从p第0个元素向后移动i个元素

q=p+i相当于*q = p[i]

这是一个排序的算法。。。

用了指针,,,

大概的意思是,,,
先从找出字串中最小的一个放在第一,,
再从第2个字符开始找最小的,放在第2,,
这样循环,,,

仔细看看吧,,,

q=p+i就是将q指向以p为起始的第i个元素,通俗的来说, 以p为起始地址,逻辑加i后组成另外一个地址,将这个地址赋给q.
p原来的值是不确定的,它是有系统随机分配的,在内存中只要是没有被占用的空间都可能成为p的值,如果输出它的值,肯能是2000,2001,等类似整形数值的数字,但它不属于整形的范畴。