Запустите эту программу, и вы получите четкое представление о том, что происходит
#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 для получения дополнительной информации.