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]); }
方法一用来交换字符串的原理是改变指针数组成员指向的地址,这没有问题。 但是如果把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); } }
第二个程序中: t=v[j];v[j]=v[j-1];v[j-1]=t; 这里的v是二维数组line的形参,line是数组,而不是程序一中的那个指针数组 line[1]是不可以看成一个指针,它的地址是固定不变的 所以你上面的赋值是完全错误的!!!
You should change line 3: char line[][10]={"C++","Fortran","Basic","Pascal","Foxbase"}; to: char line[5][10]={"C++","Fortran","Basic","Pascal","Foxbase"};
答:#include using namespace std; char* solve(char *s, char *t) { char* c = (char*)...详情>>
问:挺简单的一C函数,不过我是初学者,暂时还不会写,请好心人多多帮忙!
答:int mystrlen(char *str) { int n = 0; while (*str) { n++; str++;} return n; } voi...详情>>