你能指定一个指针的地址吗?

时间:2014-08-08 01:58:08

标签: c

虽然这个问题有点容易,但我真的不知道对此有什么确切的解释。

char *ptr = 'a';

我知道char不是字符串,但在指针的第一个索引中存储'a'并不明显吗?

3 个答案:

答案 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中。