gpt4 book ai didi

C 为什么将数组的首地址传递给 char 指针会提供整个字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:21 26 4
gpt4 key购买 nike

我目前正在尝试将 char 数组传递给 char 指针。我看到的许多示例都显示了在将 char 数组复制到字符串指针之前,您需要如何分配字符串指针将使用的内存。复制时,您遍历数组以将每个地址存储到分配的 char 指针中。

在下面的示例中,我没有初始化 char 指针,也没有遍历数组。我只是传递第一个元素的指针。

int main()
{
char c[10] = "something";
// char* new_c = (char *)malloc(strlen(c)+1);
char *new_c = NULL;
new_c = c;
printf("%s", new_c);

return 0;
}

为什么 new_c 仍然打印整个字符串?为什么人们甚至不厌其烦地遍历整个数组来复制?

最佳答案

运行这个程序,你会清楚地看到发生了什么

#include <stdio.h>
#include <string.h>

int main(void) {
char c[10] = "something";
char *new_c = NULL;
char new_c_2[10] = "";

new_c = c; // copies address of 'c' to 'new_c'


for(int i=0; c[i]!='\0'; i++) {
new_c_2[i] = c[i]; // copies value of 'c' to 'new_c_2'
}

// Data before changing the value of 'c'
printf("\nData before changing the value of \'c\'\n");
printf("new_c = %s\n", new_c);
printf("new_c_2 = %s\n", new_c_2);

strcpy(c, "changed");

// Data after changing the value of 'c'
printf("\nData after changing the value of \'c\'\n");
printf("new_c = %s\n", new_c);
printf("new_c_2 = %s\n", new_c_2);

return 0;
}

输出:

Data before changing the value of 'c'
new_c = something
new_c_2 = something

Data after changing the value of 'c'
new_c = changed
new_c_2 = something

char *new_c = NULL;new_c = c;

这些语句只是将“new_c”指向“c”的地址。因此,如果您更改“c”的值并使用“new_c”,它将转到“c”的地址并提供更新后的值。

我们将字符串复制到另一个字符串中,这样即使我们更改 'c' 的值也可以使用旧值。

更多细节请引用C编程中的按值调用和按引用调用。

关于C 为什么将数组的首地址传递给 char 指针会提供整个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53790918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com