虽然这个问题有点容易,但我真的不知道对此有什么确切的解释。
char *ptr = 'a';
我知道char不是字符串,但在指针的第一个索引中存储'a'并不明显吗?
答案 0 :(得分:5)
作业
char *ptr = 'a';
相当于
char *ptr = 97; // This assumes ASCII encoding
虽然赋值本身有效,但取消引用此指针无效。
如果要指定指向其中包含字符'a'
的指针,可以使用字符串文字,数组初始值设定项,或者使用单字符指针:
char *ptr = "a"; // String literal
char a[] = {'a'}; // Character array
char *ptr = a;
char a = 'a'; // Single character
char *ptr = &a;
答案 1 :(得分:2)
您可以指定指针的地址。基本上它是指向指针的指针。
char* ptr = "a";
char** addrOfPtr = &ptr;
请注意,将'a'存储在指针的第一个索引中并不是真正发生的事情。
'a'位于计算机内存的某个位置。存储在ptr
中的值是您可以用来查找ram位置的数字。它被称为“地址”,因为当人们描述这些位置时,他们就像家乡街道地址一样。
因此,'a'不会存储在地址的第一个索引中,而是存储在街道地址的第一个索引中。您居住在街道地址的家中,“a”的值位于ptr
中存储的地址值指定的内存中。
请注意,这意味着“指针指针”addrOfPtr
包含ptr
中的值所在的地址。
----编辑驱动点回家----
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char** argv) {
char* ptr = "a";
char** ptr_ptr = &ptr;
printf("the value of ptr is '%s', and it is located at %p\n", ptr, &ptr);
printf("the value of ptr_ptr is '%p', and it is located at %p\n", ptr_ptr, &ptr_ptr);
return 0;
}
将打印出指针的值和地址。
the value of ptr is 'a', and it is located at 0x7ffff79642d8
the value of ptr_ptr is '0x7ffff79642d8', and it is located at 0x7ffff79642d0
您可以看到ptr_ptr
的值是ptr
的地址,表明指针存储值的地址,其方式是语法旨在使该地址的值比实际存储的地址更容易。
答案 2 :(得分:2)
指针必须分配一个地址。 'a'
不是地址。它是一个整数类型,值为97
,假设为ASCII。如果您为ptr
分配值97
并尝试取消引用它,则很可能会因为地址97
不存在而导致分段错误。
char *ptr = "a";
是正确的,因为编译器会将字符'a'
和\0'
存储在连续的内存中,并将'a'
的地址存储到ptr
中。