关于数组:使用C中的表指针交换char

Swap char with table pointers in C

我试图用两个表指针交换两个字符。有人能给我解释一下我的密码有什么问题吗?终端说char** is expected,但我不知道该怎么做,所以我觉得我不太明白指针是如何工作的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
}


以下代码适用于您:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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
echangeM2(&adtab1,&adtab2);

这样可以修复编译错误。您正在将char*指针传递给需要char **指针的函数

编辑:看起来你想要

1
2
3
4
5
6
char **adtab1;
char **adtab2;
adtab1 = &tab1;
adtab2=&tab2;
...
echangeM2(adtab1,adtab2);