我决定通过学习 C 来使我的生活复杂化。目前我正在尝试完全理解指针。
到目前为止,这是我的理解:
#include <stdio.h>
int main() {
char var = 'A';
// Iniialize a pointer variable to the ADDRESS of variable "var"
char *ptr = &var;
printf("%c", var); // Output: 'A'
// Change the VALUE at the memory location of variable "var"
*ptr = 'B';
printf("%c", var); // Output: 'B'
return (0);
}
但是后来我正在考虑将一个字符串重新分配给一个变量,并遇到了这篇文章,其中一个指针变量被直接赋值。
这就是我想要理解的:
#include <stdio.h>
int main() {
// Declare a pointer variable
char *ptr;
// Assign a VALUE directly to a memory location???
ptr = "String 1";
printf("%s", ptr); // Output: "String 1"
return (0);
}
此外,如果我为 分配一个新的字符串值ptr
,例如ptr = "String 2";
,并在每次分配后输出内存位置,我会得到一个不同的内存位置:
#include <stdio.h>
int main() {
// Declare a pointer variable
char *ptr;
// Assign a VALUE directly to a memory location???
ptr = "String 1";
printf("%s\n", ptr); // Output: "String 1"
printf("%p\n", ptr); // Output: 0000000000404003 <- one memory location
// Assign a new VALUE to the pointer variable
ptr = "String 2";
printf("%s\n", ptr); // Output: "String 2"
printf("%p", ptr); // Output: 000000000040400F <- a new memory location
return (0);
}
我真的为指针变量引用的内存位置分配了一个值吗?
为什么当我为指针变量分配新值时内存位置会发生变化?