int main(){
char* ants[5]={"red ant" ,"blue ant" ,"green ant" ,"yellow ant" ,"white ant"};
.... }
如果要交换"red ant"
和如何交换两个字符串"white ant"
?有人可以帮我写代码(根本不使用另一个数组)吗???
用于蚂蚁类型的字符串是String-Literals,在所有但不合格的编译器上,它们都是只读的(非可变的)。字符串文字具有字符类型数组,其长度设置为包含字符和'\0'
(以n终止的字符)。字符串文字的标准部分是C11标准-6.4.5字符串文字
你不能更改字符串文字的内容,但是可以更改哪个指针指向哪个字符串文字。你的情况是:
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()
函数来交换指针,则不能仅将指针作为参数传递,例如,你不能编写:
swap (char *a, char *b)
然后交换a
并b
在函数中。为什么?指针a
和b
是实际指针的副本。它们是swap()
函数的局部变量。因此,你在函数中对它们所做的任何操作都不会在中看到main()
。
你可以提供指针的地址作为参数,然后在这两个地址处交换指针,更改将在中看到main()
。通过传递原始指针的实际地址,可以对原始地址处的值进行任何更改,并且可以在中返回main()
。因此swap()
,两个指针的函数可以写成:
/** 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()
传递每个指针地址的函数,例如
#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语言中的Type数组将转换为指向第一个元素的指针。C11标准-6.3.2.1其他操作数-左值,数组和函数指示符(p3)因此,每个和都是指向每个中第一个字符的指针的指针。因此,每个元素都具有char**
开始的类型。这就是为什么你可以通过ants + 0, ants + 1
以交换第一和第二(红色和蓝色)蚂蚁。
仔细看一下,如果你还有其他问题,请与我联系。
非常感谢!!对于您的时间和精力,它起到了很大的作用。
不客气。祝您编码顺利!