爱问知识人 爱问教育 医院库

c语言指针数组和字符串数组的区别,高手请进

首页

c语言指针数组和字符串数组的区别,高手请进

要对几个字符串排序后输出。
两个程序,只是对数组的定义不同,第一个定义的是指针数组,是对的;第二个定义的是字符串数组,却是错的。指针数组的v[i]和字符串数组的v[i]不都是表示指向一个字符串的一级指针吗?二者有什么不同?为什么第二个是错的?
程序一:
#include "stdio.h"
main()
{char *line[]={"C++","Fortran","Basic","Pascal","Foxbase"};
 int n=5;
 shellsort(line,n);
 writeline(line,n);
}

shellsort(v,n)
char *v[];
int n;
{char *t;
 int i,j;
 for(i=0;i<n-2;i++)
  {for(j=n-1;j>i;j--)
    if(strcmp(v[j-1],v[j])>0)
     {t=v[j];v[j]=v[j-1];v[j-1]=t;}
  }
}

writeline(linp,n)
char *linp[];
int n;
{int i;
 for(i=0;i<n;i++)
  printf("%s\n",linp[i]);
}
程序二:
#include "stdio.h"
main()
{char line[][10]={"C++","Fortran","Basic","Pascal","Foxbase"};
 int n=5;
 shellsort(line,n);
 writeline(line,n);
}

shellsort(v,n)
char v[][10];
int n;
{char *t;
 int i,j;
 for(i=0;i<n-2;i++)
  {for(j=n-1;j>i;j--)
    if(strcmp(v[j-1],v[j])>0)
     {t=v[j];v[j]=v[j-1];v[j-1]=t;}
  }
}

writeline(linp,n)
char linp[][10];
int n;
{int i;
 for(i=0;i<n;i++)
  printf("%s\n",linp[i]);
}

提交回答
好评回答
  • 2007-07-30 13:06:01
    方法一用来交换字符串的原理是改变指针数组成员指向的地址,这没有问题。
    但是如果把line声明成2维数组,数组的地址值是不能随意修改的,所以,你无法强制把line[0]指定到其他地方。
    可把方法二的字符串交换处理作如下改动:
    {
    char t[10]; 
    int i,j; 
    for(i=0;ii;j--) 
    if(strcmp(v[j-1],v[j])>0) 
    {
    /*t=v[j];v[j]=v[j-1];v[j-1]=t;*/
    strcpy(t, v[j]);
    strcpy(v[j], v[j-1]);
    strcpy(v[j-1], t);
    } 
    } 
    

    E***

    2007-07-30 13:06:01

其他答案

    2007-07-31 10:50:44
  • 第二个程序中:
    t=v[j];v[j]=v[j-1];v[j-1]=t;
    这里的v是二维数组line的形参,line是数组,而不是程序一中的那个指针数组
    line[1]是不可以看成一个指针,它的地址是固定不变的
    所以你上面的赋值是完全错误的!!!

    终***

    2007-07-31 10:50:44

  • 2007-07-30 01:29:13
  • You should change line 3:
    char line[][10]={"C++","Fortran","Basic","Pascal","Foxbase"};
    to:
    char line[5][10]={"C++","Fortran","Basic","Pascal","Foxbase"};
    

    b***

    2007-07-30 01:29:13

类似问题

换一换
  • C/C++ 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 174-193
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):