这个C语言输出结果是? 求教高人来做个分析

来源:百度知道 编辑:UC知道 时间:2024/06/14 11:54:09
32.以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序
#include<string.h>
void f(char p[ ][10],int n)
{char t[20];int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(p[i],p[j]<0)
{strcpy(t,p[i]); strcpy(p[i],p[j]); strcpy(p[j],t);}
}
main()
{char p[ ] [10]={“abc”,”aabdfg”,”abbd”,”dcdbe”,”cd”};int i;
f(p,5);printf(“%d\n”,strlen(p[0]));
}
程序运行后的输出结果是
个人觉得这个是无参函数void f(char p[ ][10],int n) 不带回函数值 所以有用的只有main函数
即计算p[0]的长度
p[0]就是{“abc” 所以我个人认为结果是3 可答案是5
求各位C高手能全面的帮我做一下分析 谢谢

输出的结果应该是5,
void f(char p[ ][10],int n)函数的作用是将字符串数组p,
按照字符串从大到小的顺序排序的,
所以f()执行完毕后,
p[ ] [10]=
{
”dcdbe”,
”cd”,
”abc”,
”abbd”,
”aabdfg”,
}
所以strlen(p[0])为5

这个由于是数组传递,所以属于地址,也就是指针传递,不是值传递,虽然是void,但字符串数组是传递的首地址的指针,所以字符串内容会改变。这个函数由于是把字符串由大到小排列,所以最后p[0]="dcdbe"。所以答案是5。
记住数组传递的都是指针。即P就是个指针

void f(char p[ ][10],int n)中函数参数p用的是二维数组,传递进来的是指向指针的指针,p[i]是p指向的地址值,你的f函数对形参的指针指向的值改变了当然会改变实参指针指向的值啊。

高手!