字符串指针变量赋值的时候为什么不加取地址符号
如果您想让指针变量指向一个数组或字符串的首地址,您不需要使用 &,因为数组名或字符串字面量本身就代表了它们的首地址,例如:
int arr[5] = {1, 2, 3, 4, 5}; // 声明一个整型数组 arr
int *p = arr; // 声明一个指针变量 p,并让它指向 arr 的首地址,等价于 p = &arr[0]
char *s = "hello"; // 声明一个指针变量 s,并让它指向字符串字面量 "hello" 的首地址
关于 C 语言中指针变量赋值的时候是否需要加取地址符号。一般来说,取地址符号 & 的作用是获取一个变量的内存地址。
当您给一个指针变量赋值的时候,您需要让它指向一个有效的内存地址,这个地址可以是另一个变量的地址,也可以是一个数组或字符串的首地址,或者是一个动态分配的内存空间的地址。
如果您想让指针变量指向一个普通变量的地址,您需要使用 & 来获取这个变量的地址,例如:
int a = 10; // 声明一个整型变量 a
int *p = &a; // 声明一个指针变量 p,并让它指向 a 的地址
如果您想让指针变量指向一个数组或字符串的首地址,您不需要使用 &,因为数组名或字符串字面量本身就代表了它们的首地址,例如:
int arr[5] = {1, 2, 3, 4, 5}; // 声明一个整型数组 arr
int *p = arr; // 声明一个指针变量 p,并让它指向 arr 的首地址,等价于 p = &arr[0]
char *s = "hello"; // 声明一个指针变量 s,并让它指向字符串字面量 "hello" 的首地址
如果您想让指针变量指向一个动态分配的内存空间的地址,您不需要使用 &,因为动态内存分配的函数,如 malloc,calloc,strdup 等,会返回一个指向分配的内存空间的地址,例如:
int *p = (int *)malloc(sizeof(int) * 5); // 声明一个指针变量 p,并让它指向一个动态分配的大小为 5 个整型的内存空间的地址
char *s = strdup("hello"); // 声明一个指针变量 s,并让它指向一个动态分配的并复制了字符串 "hello" 的内存空间的地址
总之,指针变量赋值的时候是否需要加取地址符号,取决于您想让它指向的对象是否已经是一个地址,或者是否可以通过 & 来获取一个地址。