在这个程序中,我交换了前两个免费精选名字大全
#include void swap(char **,char **); main() { char *name[4]={"amol", "robin", "shanu" }; swap(&name[0],&name[2]); printf("%s %s",name[0],name[2]); } void swap(char **x,char **y) { char *temp; temp=*x; *x=*y; *y=temp; }
这个程序运行得很完美但是当我使用function swap(char *,char *)
它不会交换地址为什么? 为什么我必须使用指针指针?
我假设你理解交换整数你会有像swap(int *, int *)
这样的函数
同样,当你想交换char *
字符串时。 你需要像swap(char **, char **)
这样的函数。
在这种情况下,你可以使用它们的指针并交换它们的内容(否则一旦函数返回就不会交换值)。 对于整数内容,指针是int *
,如果字符串内容是char *
指向它的指针是char **
。
指针(与所有值一样)按值传递。
如果你使用swap(char * a,char * b)
并写a = tmp;
这仅更改局部变量a
而不更改调用者中的原始变量。
由于同样的原因,这个更简单的示例也无法正常工作:
void change(int x) { x = 0; // Only changes the local variable. } int main(void) { int x = 0; change(x); // This does not have any effect. printf("%d", x); // 0 is printed return 0; }
char *name[4]
保存3个字符串文字的地址。 如果我们想要交换,我们必须传递数组的引用,其中存储了字符串文字的地址。 这意味着我们必须将name+0
和name+2
或&name[0]
和&name[2]
传递给交换函数。
而且如果你想交换。 您必须以char **
接收地址,然后我们必须更改数组中字符串文字的地址。
如果你收到它作为char *
并且你试图改变像temp = x; x = y; y = temp
temp = x; x = y; y = temp
temp = x; x = y; y = temp
,这将是函数swap
局部更改。 它不会反映在数组name
。
这听起来像你在寻找:
#include void swap(char *,char *); main() { char name[4][10]={"amol", "robin", "shanu" }; swap(name[0],name[2]); printf("%s %s",name[0],name[2]); } void swap(char *x,char *y) { char *temp; temp=x; x=y; y=temp; }
主要区别在于名称声明。 在您的版本中,您声明了一个指针数组,因此您必须将条目取消引用为* name [0]。 在第二个版本中,它声明了一个’char数组’或字符串数组,每个条目都包含一个字符串,而不是一个指针,因此你可以将这些条目取消引用为name [0]。 如果使用gdb并在使用print命令时单步执行代码,您将清楚地看到差异。
以上就是c/c++开发分享字符串交换适用于char **但不适用于char *相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560332.html