这是我的代码;我想交换下面的名字。我正在练习这个;
我得到的错误是
Segmentation fault
任何帮助将不胜感激。
void nameSwap(char **wife[3],char **husband[3])
{
int i;
char **tmp[3];
for(i=0;i<3;i++)
{
*tmp[i]=*wife[i];
*wife[i] = *husband[i];
*husband[i] = *tmp[i];
}
int main(int argc,char *argv[])
{
char *name1[3]={"Chicago","University","Computer"};
char *name2[3]={"I","Love","Uchicago"};
int k;
char **p1[3];
char **p2[3];
for(k=0;k<3;k++)
{
*p1[k]=name1[k];
*p2[k]=name2[k];
}
for(k=0;k<3;k++)
{
printf("%s %s\n",*p1[k],*p2[k]);
}
nameSwap(&p1[3],&p2[3]);
for(k=0;k<3;k++)
{
printf("%s %s\n",*p1[k],*p2[k]);
}
return 0;
}
答案 0 :(得分:1)
让我们从交换函数开始:它指向2个指向char
的3个指针的数组。它可以声明为void nameSwap(char *wife[3], char *husband[3])
,但请注意类似数组的语法具有误导性,实际上与此相同:void nameSwap(char *wife[], char *husband[])
或者:void nameSwap(char **wife, char **husband)
。在C中,指向char
的指针数组作为指向char
的指针传递。
为了执行交换,只需要一个临时变量,因为你一次只交换2个指针。
这是一个更正后的版本,使用[]
语法强调wife
和husband
指向数组的事实,而不是单指针(就像argv
一样{ {1}}):
main
然后让我们看一下void nameSwap(char *wife[], char *husband[])
{
for (int i = 0; i < 3; i++) {
char *tmp = wife[i];
wife[i] = husband[i];
husband[i] = tmp;
}
}
函数:
main
我希望这个解释可以帮助您更好地理解。指针和数组在C语言中是 棘手的东西。获得它的最佳方式与骑自行车相同:从已经了解艺术的朋友那里得到一些帮助。
答案 1 :(得分:1)
双指针意味着
char **
#include <stdio.h>
void nameSwap(char ***wife, char ***husband){
char **tmp;
tmp = *wife;
*wife = *husband;
*husband = tmp;
}
int main(void){
char *name1[3]={"Chicago","University","Computer"};
char *name2[3]={"I","Love","Uchicago"};
int k;
char **p1;
char **p2;
p1 = name1;
p2 = name2;
for(k=0;k<3;k++){
printf("%s %s\n", p1[k], p2[k]);
}
nameSwap(&p1, &p2);
for(k=0;k<3;k++){
printf("%s %s\n", p1[k], p2[k]);
}
return 0;
}
指向char *var_name[3]
#include <stdio.h>
void nameSwap(char *(**wife)[3], char *(**husband)[3]){
char *(*tmp)[3];
tmp = *wife;
*wife = *husband;
*husband = tmp;
}
int main(void){
char *name1[3]={"Chicago","University","Computer"};
char *name2[3]={"I","Love","Uchicago"};
int k;
char *(*p1)[3];
char *(*p2)[3];
p1 = &name1;
p2 = &name2;
for(k=0;k<3;k++){
printf("%s %s\n", (*p1)[k], (*p2)[k]);
}
nameSwap(&p1, &p2);
for(k=0;k<3;k++){
printf("%s %s\n", (*p1)[k], (*p2)[k]);
}
return 0;
}