Bor*_*ris -1 c arrays swap pointers
我在 C 中有以下数组(使用随机名称)
char * inputs[6] = {
"Kangaroo my shoe", "Fly high dragonfly",
"Philosophical Monkey", "Jumping Ape",
"Fearful lemurs", "Tall Giraffes"
};
Run Code Online (Sandbox Code Playgroud)
目标是用下一个交换第一个元素。就像在做这个
char * inputs[6] = {
"Fly high dragonfly", "Kangaroo my shoe",
"Jumping Ape", "Philosophical Monkey",
"Tall Giraffes", "Fearful lemurs"
};
Run Code Online (Sandbox Code Playgroud)
我已经尝试了以下以及更多。
ArrSwap(char *Arr[]){
int i;
for(i=0;i<6;i++){
void*temp = Arr[i];
Arr[i]=Arr[i+1];
Arr[i+1] = temp;
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!我花了几个小时试图弄清楚这一点,每次我这样做都会以混乱的顺序结束,或者没有交换第一个和最后一个预期的任何元素。
您的代码中有两个问题-
ArrSwap()您在索引 0 到 5 上循环。因此,何时i变为5,Arr[i+1]指向Arr[6]哪个导致从超出数组边界的内存中读取。这是未定义的行为。ArrSwap()循环中需要增加 2 而不是 1。因此,在解决这两个问题后,代码可能如下所示 -
void ArrSwap(char *Arr[]){
int i;
for(i=0; i<5; i+=2) {
char *temp = Arr[i];
Arr[i]=Arr[i+1];
Arr[i+1] = temp;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,ArrSwap()函数中进行了以下更改-
i < 6变为i < 5(上面第 1 点提到的原因)。正如池上所说,最佳实践是将数组大小作为参数传递(例如n)并n - 1在循环条件中使用。char *而不是void *(元素的类型Arr是char *)ArrSwap()被提及为void。随着void它清楚地传达,ArrSwap()不会返回任何东西。修复inputs后将是:
{"Fly high dragonfly", "Kangaroo my shoe", "Jumping Ape", "Philosophical Monkey", "Tall Giraffes", "Fearful lemurs"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |