首页 > 试题广场 >

下列程序的功能是将 s 中的字符串按长度由小到大排列,请为横

[单选题]

下列程序的功能是将 s 中的字符串按长度由小到大排列,请为横线处选择合适的程序()

#include <stdio.h>
#include <string.h>

void f(char *p[], int n) {
    char *t;
    int i, j;
    for (i = 0; i < n - 1; i++)
        for (j = i + 1; j < n; j++)
            if (strlen(*(p + i)) > strlen(*(p + j))) {
                t = *(p + i);
                *(p + i) = *(p + j);
                *(p + j) = t;
            }
}

int main() {
    char *s[] = {"abc", "abcdef", "abbd"};
    f(s, 3);
    for (int i = 0; i < 3; i++)
        printf("%s\n", ____);
    return 0;
}

  • s+i
  • s[i]
  • *s[i]
  • &s[i]
推荐
B。首先原题目是错误的。
题干 if(strlen(*(p+i))>strlen(*(p+i)))后一个应该是(p+j)
考察的是指针数组的遍历.
  • A选项的数组名为指针,无法遍历数组元素。
  • C、D是指针,元素的地址。
     
编辑于 2019-09-17 14:06:28 回复(2)
这个题目不用看程序,直接是其写法不对
A选项:S+i 是指针数组的地址,如果要取值,应该是*(s+i)
B选项:S[i]是取数组的值,即指向字符数组的首地址
C选项:等同于s[i][j]
D选项:&s[i]相当于s+i
发表于 2021-05-05 21:26:50 回复(0)
答案选B.
题中s[i]等同于是char * c,存储的是一个字符串的首地址,比如char a[] = {"abc"},则 s[i]=c= a,那么printf(“%s\n”,a);是能够通过a首地址输出整个字符串的。
main() {
	char a[]={"abc"};
	char *c = a;
	printf("%s\n",c);
	 
}

该题我没看出错误,本地运行也正确,运行如下。

编辑于 2020-05-02 10:51:40 回复(1)
排序的题混进C++的指针就没意思了,毕竟像Java是没有指针的
发表于 2020-07-29 09:05:51 回复(0)
选 B
s是一个指针数组,里面存放了的分别是"abc","abcdef",''abbd''三个字符串的首地址
A选项:s是指针数组,s+i得到的是对指针数组的首地址进行(i*指针大小)个字节的偏移
B选项:s[i]=*(s+i),相当于对A选项进行解引用,得到数组中存放的字符串的首地址
C选项:s[i]是字符串的首地址,即字符串中首字母的地址,*s[i]之后得到单个字符的地址,此时打印出来的是单个字符
D选项:&s[i]=&*(s+i)=s+i 同A选项
发表于 2023-10-16 11:31:19 回复(0)
这种题目出现在前端开发就离谱!
发表于 2022-02-15 15:21:39 回复(0)
在字符串数组中 char* s[i]; s[i]输出的是字符串不是地址,及s[i]就是字符串不是地址 *s[i]表示这个元素内保存的地址
发表于 2021-02-17 16:14:22 回复(0)
这题为啥会算到算法来,不是c语言基础吗
发表于 2020-06-06 16:38:58 回复(0)
选B
原题目中提取字符串长度不对
发表于 2019-09-17 20:29:09 回复(0)
char *s【】:指针数组
发表于 2023-03-27 20:51:39 回复(0)
B 显然
发表于 2019-09-18 09:22:48 回复(0)