【发布时间】:2021-12-01 14:29:50
【问题描述】:
据我所知,当我们创建一个数组或字符串时,它们的名称是指向它们的第一个元素的指针。在这种情况下,指针无法更改。
但是,这段代码可以工作:
#include <stdio.h>
void swapString(char **str1_ptr, char **str2_ptr)
{
char *temp = *str1_ptr;
*str1_ptr = *str2_ptr;
*str2_ptr = temp;
}
int main()
{
char strings[][30] = {"Test1","Test2","Test3"};
int i;
swapString((char **)&strings[0],(char **)&strings[1]);
for(i=0;i<3;i++){
printf("%s\n",strings[i]);
}
return 0;
}
为什么这很好用? 以这种方式交换字符串(或一般的数组)是一种好习惯吗? 什么时候使用这种方法不是一个好主意?
【问题讨论】:
-
为什么指针不能改变?是什么阻止了它?
-
@Cheatah 实际上,据我所知,名称 os 字符串和数组所指向的地址无法更改。我们可以改变它吗?
-
是的,如果它们没有被声明为
const。最大的风险是您的函数假设它只能更改指针,而实际上指针被放在一些只读部分中。这取决于开发人员跟踪并正确应用const说明符。 -
@Cheatah 不涉及指针,而是一个数组。