Я думаю, вы можете быть смущены тем, что делают назначения для pc1
и pc2
. Эти операторы не копируют содержимое указанной строки в область памяти, на которую указывают pc1
и pc2
. Они изменяют область памяти, на которую указывают pc1
и pc2
. Чтобы понять, что я имею в виду, давайте добавим немного больше в ваш код и сделаем его полноценной программой:
#include <stdio.h>
int main() {
char* pc1 = NULL;
char* pc2 = NULL;
printf("pc1 pointing to location in memory: %p\n", pc1);
printf("pc2 pointing to location in memory: %p\n", pc2);
pc1 = "STRING";
pc2 = "ANOTHERSTRING";
printf("pc1 pointing to location in memory: %p\n", pc1);
printf("pc2 pointing to location in memory: %p\n", pc2);
}
Теперь скомпилируйте и запустите это. Когда я делаю это на моей машине, я получаю следующий вывод:
pc1 pointing to location in memory: (nil)
pc2 pointing to location in memory: (nil)
pc1 pointing to location in memory: 0x5578b61a57b8
pc2 pointing to location in memory: 0x5578b61a57bf
pc1
и pc2
начинаются с указания на «ничто» (NULL
или nil
). Затем, после операторов присваивания, мы указали им разные места в памяти, которые содержат строки «STRING» и «ANOTHERSTRING» соответственно.