在C语言中,指针数组中的指针变量可以实现交换吗?我不清楚是我的代码问题,还是C语言本身就不支持指针数组中指针位置的交换,下面的交换得不到想要的结果。
如题
#include <stdio.h>
#include <string.h>
#include <iostream>
#define MAXLEN 1000
using namespace std;
//字符串交换
void str_swap1(char **str1, char **str2){
char *temp;
temp = *str1; //此时temp指向了*str1指针变量地址
*str1 = *str2; //形参中**str1是指向*str1指针的指针,*str1指针变量地址修改成了*str2指针变量地址
*str2 = temp; //形参中**str2是指向*str2指针的指针,*str2指针变量地址修改成了temp指针变量地址
}
//字符串按字典排序
void arr_sort(char *arr[], int len){
int i,j;
//插入排序
for(i = 1; i < len; ++i){
int index = 0;
for(j = i; j > 0; --j){
if(strcmp(arr[j - 1], arr[j]) > 0){
int k = 0;
cout << "交换前";
for(k = 0; k < len; ++k){
cout << arr[k] << " ";
}
char *temp = arr[j - 1];
char *temp1 = arr[j];
str_swap1(&temp,&temp1); //传入指针变量的地址
printf(" swap: %s, %s",temp,temp1);
cout << "交换后";
for(k = 0; k < len; ++k){
cout << arr[k] << " ";
}
cout << endl;
}
}
}
}
int main()
{
int num,i;
char *arr[num]; //字符串数组
char str[MAXLEN]; //输入的字符串
scanf("%d",&num);
printf("输入%d个单词\n",num);
for(i = 0; i < num; ++i){
arr[i] = (char *) malloc(sizeof(char) * MAXLEN); //如果未给arr[i]分配空间,scanf会报错:segmentation fault
scanf("%s",arr[i]);
}
// printf("输入字符串\n");
// scanf("%s",str);
int j;
cout << "排序前:" << endl;
for(i = 0; i < num; ++i){
cout << arr[i] << endl;
}
arr_sort(arr,num);
cout << "排序后:" << endl;
for(i = 0; i < num; ++i){
cout << arr[i] << endl;
}
return 0;
}
输出结果为:
3
输入3个单词
peach
banana
apple
排序前:
peach
banana
apple
交换前peach banana apple swap: banana, peach交换后peach banana apple
交换前peach banana apple swap: apple, banana交换后peach banana apple
交换前peach banana apple swap: banana, peach交换后peach banana apple
排序后:
peach
banana
apple