在C中交换带有表指针的字符

时间:2012-12-16 15:49:07

标签: c arrays pointers char

我正在尝试用两个表指针交换两个char。 有人可以向我解释我的代码中有什么问题吗? 终端说char** is expected,但我不知道该怎么做,所以我觉得我并不真正理解指针如何用于表格。

void echangeM2(char **ptab1, char **ptab2){

  char *tmp = *ptab1;
  *ptab1 = *ptab2;
  *ptab2 = *tmp;
  printf("%s\t %s",*ptab1,*ptab2);

  return;
}

int main(void) {
  char tab1[25];
  char tab2[25];
  char *adtab1;
  char *adtab2;
  *adtab1 = &tab1;
  *adtab2=&tab2;
  printf("type two words");
  scanf("%s %s",tab1,tab2);
  echangeM2(adtab1,adtab2);
  return 0;
}

2 个答案:

答案 0 :(得分:1)

以下代码适合您:

#include <stdio.h>

void exchangeM2(char* *ptab1, char* *ptab2) { // accepts pointer to char*
  char* tmp = *ptab1;  // ptab1's "pointed to" is assigned to tmp
  *ptab1 = *ptab2;     // move ptab2's "pointed to" to ptab1
  *ptab2 = tmp;        // now move tmp to ptab2
  printf("%s\t %s",*ptab1,*ptab2);
}

int main(void) {
  char tab1[25];
  char tab2[25];
  char* adtab1;
  char* adtab2;
  adtab1 = tab1;  // array name itself can be used as pointer
  adtab2 = tab2;
  printf("type two words");
  scanf("%s %s",tab1,tab2);
  exchangeM2(&adtab1, &adtab2);  // pass the address of the pointers to the function
}

答案 1 :(得分:0)

echangeM2(&adtab1,&adtab2); 

这应该可以解决编译错误。您正在将char*指针传递给期望char **指针

的函数

编辑:实际上看起来你想要像

这样的东西
char **adtab1;
char **adtab2;
adtab1 = &tab1;
adtab2=&tab2;
...
echangeM2(adtab1,adtab2);