[英]How can I swap the first character of two strings with each other ? the two strings are stored in array of pointers
[英]how can I swap two strings in a string-array of pointers in C without using other arrays?
int main(){
char* ants[5]={"red ant" ,"blue ant" ,"green ant" ,"yellow ant" ,"white ant"};
.... }
如果我想交换"red ant"
和"white ant"
,如何交换两个字符串? 有人可以帮我写代码(根本不使用另一个数组)???
用于蚂蚁类型的字符串是字符串字面量,并且在所有不符合标准的编译器上都是只读的(非可变的)。 字符串文字的类型为字符数组,长度设置为包含字符和'\0'
(nul 终止字符)。 字符串文字的标准部分是C11 Standard - 6.4.5 String literals
您无法更改字符串文字的内容,但可以更改哪个指针指向哪个字符串文字。 在您的情况下,您有:
char *ants[5]={"red ant" ,"blue ant" ,"green ant" ,"yellow ant" ,"white ant"};
它具有指向char
的指针数组类型。 所以你有一个字符指针数组。 数组中的每个指针都保存着ants
中字符串之一的地址。 要更改ants
中字符串的顺序,您必须swap
数组中指针所持有的地址。
交换红色和蓝色蚂蚁的一个简单示例可能是:
#include <stdio.h>
int main(){
char *ants[5]={"red ant" ,"blue ant" ,"green ant" ,"yellow ant" ,"white ant"};
int n = sizeof ants / sizeof *ants; /* number of ants */
char *t = ants[0]; /* temp pointer holding 1st address */
ants[0] = ants[1]; /* assign 2nd address to 1st pointer */
ants[1] = t; /* assign temp pointer to 2nd */
for (int i = 0; i < n; i++) /* output swapped ants */
puts (ants[i]);
}
示例使用/输出
$ ./bin/swap_ants
blue ant
red ant
green ant
yellow ant
white ant
如果你想写一个swap()
function 来交换指针,你不能只将指针作为 arguments 传递,例如,你不能写:
swap (char *a, char *b)
然后在 function 中交换a
和b
。 为什么? 指针a
和b
是实际指针的副本。 它们是swap()
function 的局部变量。 因此,您在 function 中对它们所做的任何操作都不会在main()
中看到。
您可以将指针的地址作为 arguments 提供,然后在这两个地址处交换指针,并且将在main()
中看到更改。 通过传递原始指针的实际地址,对原始地址的值所做的任何更改都可以在main()
中使用。 所以两个指针的swap()
function 可以写成:
/** swap pointers, changing pointer at address */
void swapptr (char **a, char **b)
{
char *t = *a; /* pointer at a's address saved in t */
*a = *b; /* assign pointer from b to a */
*b = t; /* assign temp pointer t to b */
}
现在如果你想交换红蓝蚂蚁,你可以简单地调用swapptr()
function 传递每个指针的地址,例如
#include <stdio.h>
/** swap pointers, changing pointer at address */
void swapptr (char **a, char **b)
{
char *t = *a; /* pointer at a's address saved in t */
*a = *b; /* assign pointer from b to a */
*b = t; /* assign temp pointer t to b */
}
int main(){
char *ants[5]={"red ant" ,"blue ant" ,"green ant" ,"yellow ant" ,"white ant"};
int n = sizeof ants / sizeof *ants; /* number of ants */
swapptr (ants, ants + 1);
for (int i = 0; i < n; i++) /* output swapped ants */
puts (ants[i]);
}
(相同的输出)
注意:您必须注意类型。 ants
(即ants+0
)和ants + 1
是指向您的字符串文字的指针,它们是指向字符数组的指针。 但是在访问时,C 中的类型数组被转换为指向第一个元素的指针。 C11 标准 - 6.3.2.1 其他操作数 - 左值、arrays 和 function 指示符(p3)因此,每个和都是指向每个中第一个字符的指针的指针。 所以每个元素都有类型char**
开始。 所以这就是为什么你可以通过ants + 0, ants + 1
来交换第一和第二(红色和蓝色)蚂蚁。
如果您还有其他问题,请仔细查看并告诉我。
据我所知, char* 是指向地址记录的指针。 所以如果你定义char *temp;
并使用此变量存储指向 ants[0] 的指针,从技术上讲,您并没有创建不同的数组来创建新订单。
char *temp;
temp=ants[0];
ants[0]=ants[4];
ants[4]=temp;
并且交换了位置...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.