指针混淆char *和int *

时间:2017-12-24 18:53:36

标签: c++

我在学习c ++时遇到了这种困惑:

int *a = 8 ; 

这给出了一个错误,因为正如我所理解的那样,我试图将一个整数设置为一个指针,这是一个内存位置。但是,

const char *name = "name"; 

工作得很好吗?我没有得到它,因为名称应该是十六进制的内存位置,但我试图将其设置为一系列字符。

2 个答案:

答案 0 :(得分:3)

您的案例中的字符串文字"name"的类型为const char[]。数组可以衰减到指针,这是在这种情况下发生的事情。然后该指针将指向数组中的第一个元素。请注意,由于C ++ 11分配给char*而不是const char*(因此需要转换)是非法的,所以始终使用const char*来表示字符串文字,或者更好,std::string

8的类型为int,它没有转换为数组所具有的指针类型。

答案 1 :(得分:0)

int*char*的规则相同。但是,您将苹果与橙子进行比较。

  • 不能为其指针分配相应类型的值(这里是否有const并不重要;我做了const为了与下一个重要的例子保持一致):

    int const*  ip = 8;   // ERROR
    char const* cp = ‘8’; // ERROR
    
  • 阵列在最轻微的机会下衰减指针。字符串文字是char const[N]类型的数组,其中N是字符串文字中char的数量,包括终止空char

    int  ia[] = { 8 };
    char ca[] = { ‘8’ };
    int const*  ip = ia;   // OK
    char const* cp = ca;   // OK
    char const* lp = “8”;  // OK