我已经编写了交换字符串的代码,但我无法交换.问题是什么,如何通过使用函数来解决swap?
#include <stdio.h>
void swap( char*,char*);
int main()
{
char *ptr[2] = {"hello", "morning"};
swap(ptr[0], ptr[1]);
printf("%s %s", ptr[0], ptr[1]);
return 0;
}
void swap(char *t1, char*t2)
{
char *t;
t = t1;
t1 = t2;
t2 = t;
}
Run Code Online (Sandbox Code Playgroud)
我也试图通过(&ptr[0], &ptr[1]),但这里显示了一个segmentation fault.此外,我做了一个字符,*p1 = ptr[0], char *p1 = ptr[1]和然后传递&p1,并&p2到swap,但我仍然得到分割故障.
C函数参数是按值传递的.您将地址的值传递给您的swap函数,并期望这些值(地址)发生变化.但只有函数中地址的副本会swap发生变化.
要更改实际传入的地址,您需要一个aditional级别的引用:
void swap(char **t1, char **t2)
{
char *t;
t = *t1;
*t1= *t2;
*t2 = t;
}
Run Code Online (Sandbox Code Playgroud)
并称之为swap:swap(&ptr[0], &ptr[1]);
您需要将指针传递给char数组的指针才能切换它们.通过这样做,您可以交换这些指针的值.(哪些是实际的数组.)
#include<stdio.h>
void swap( char**,char**);
int main()
{
char *ptr[2] = {"hello","mornig"};
swap(&ptr[0], &ptr[1]);
printf("%s %s",ptr[0], ptr[1]);
return 0;
}
void swap( char **t1,char **t2)
{
char *t;
t = *t1;
*t1 = *t2;
*t2 =t;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4951 次 |
| 最近记录: |