#include<stdio.h>
#include<string.h>
//#include<stdlib.h>
int main()
{
void sort(char *p[]);
char *p[10]={"wor","trafifang","pand","dai","lamada","string","t","ra","lenth","recte"};
int i;
sort(p);
for(i=0;i<9;i++)
{
printf("%s\n",*(p+i));
}
}
void sort(char *p[])
{
int i,j,k;
int n=10;
char temp[20];
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(p[k],p[j])>0)
k=j;
if(k!=i)
{
strcpy(temp,p[k]);
strcpy(p[k],p[i]); //每次都是執行到此處出錯,求高手指點,什麼原因
strcpy(p[i],temp);
}
}
}
void sort(char p[]),參數是指針數組,想問一下在函數體內, * (p+i)和p[i]都可以表示第i+1個指針,為什麼我用(p+i)可以實現排序,而用p[i]這種表達就出問題呢?
這樣是不行的,p[i] 指向常量字符串,這時 p 的數值是不能被修改的。
上一答案中,你的定義是 p[][] 是數組,在定義時編譯器會為它分配空間。但這裡,p[i] 都是指向常量字符串的指針,任何試圖對它的修改都會引起異常。