关于二维字符数组函数操作需传递参数(二维字符数组、一维数组的指针、指针数组)
从主函数输入十个字符串,并且在函数里比大小。
1、二维数组
#include<stdio.h> #include<string.h> #define N 3 #define M 10 //字符型二维数组作为参数 int main(){ void sortstr(char a[][M],int n); char a[N][M];//={"flw","dsfre","frge"}; int i; for(i=0;i<N;i++){ scanf("%s",a[i]);//a的行地址拿出来赋值 } sortstr(a,N); for(i=0;i<N;i++){ printf("%s\n",a[i]);//以a的每行首地址输出 } return 0; } void sortstr(char a[][M],int n){ int i,j; char b[M]; for(i=0;i<n;i++){ for(j=i+1;j<n;j++){ if(strcmp(a[i],a[j])>0){//当ai比aj大时,两个互换,最小的给ai strcpy(b,a[i]); strcpy(a[i],a[j]); strcpy(a[j],b); } } } }
2、一维数组的指针
#include<stdio.h> #include<string.h> #define N 3 #define M 10 //用一维数组的指针作为函数参数 char(*p)[M]//[]运算在*前面,所以要把(*p)圈起来,这样就是一维数组的指针
int main(){ void sortstr(char (*a)[M],int n); char a[N][M];//={"flw","dsfre","frge"}; char (*p)[M];//为什么定义的M,保证p++走的步长是M int i; for(i=0;i<N;i++){ scanf("%s",a[i]); } p=a; sortstr(p,N); for(i=0;i<N;i++){ printf("%s\n",a[i]); } return 0; } void sortstr(char (*a)[M],int n){//这里的a代表了行的首地址,所以直接用a[i]的方式,可以找到对应的首地址 int i,j; char b[M]; for(i=0;i<n;i++){ for(j=i+1;j<n;j++){ if(strcmp(a[i],a[j])>0){ strcpy(b,a[i]); strcpy(a[i],a[j]); strcpy(a[j],b); } } } }
3、指针数组
#include<stdio.h> #include<string.h> #define N 3 #define M 10 //用指针数组 int main(){ void sortstr(char *a[],int n); char a[N][M];//={"flw","dsfre","frge"}; char *p[N];//定义是行的,因为指针数组里存储的是每一行的首地址 int i; for(i=0;i<N;i++){//指针数组的每个指针都要赋值,要不然指针为空,找不到地方。 p[i]=a[i]; } for(i=0;i<N;i++){ scanf("%s",p[i]); } sortstr(p,N); for(i=0;i<N;i++){ printf("%s\n",p[i]); } return 0; } void sortstr(char *a[],int n){ int i,j; char *t; for(i=0;i<n;i++){ for(j=i+1;j<n;j++){ if(strcmp(*(a+i),*(a+j))>0){ strcpy(t,*(a+i)); strcpy(*(a+i),*(a+j)); strcpy(*(a+j),t); } } } }

浙公网安备 33010602011771号