Swap char with table pointers in C
我试图用两个表指针交换两个字符。有人能给我解释一下我的密码有什么问题吗?终端说
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); |
这样可以修复编译错误。您正在将
编辑:看起来你想要
1 2 3 4 5 6 | char **adtab1; char **adtab2; adtab1 = &tab1; adtab2=&tab2; ... echangeM2(adtab1,adtab2); |