【问题标题】:Explain the following syntax, i am not able to comprehend this解释以下语法,我无法理解
【发布时间】:2013-09-07 15:59:47
【问题描述】:
   int a=4;
   int *p=&a;

这个语法是对的,但是当我们这样写时

   int a;
   int *p;
   *p=&a;

第三行是一个错误,我知道但是,为什么可以在第一个代码中这样做

   int *p=&a;

当我们通过引用函数传递值时,我们甚至会这样做...... 谢谢回复

【问题讨论】:

  • 初始化 (int *p=&a;) 和赋值 (*p=&a;) 是不同的东西

标签: c pointers syntax


【解决方案1】:

int *p=&a;,你是

  • 声明一个变量 (p),它是一个指向 int 的指针
  • a的地址分配给p

等效的代码是

int *p; // declare a pointer variable 'p'
p = &a; // assign the address of a to 'p'

第三行*p=&a; 是错误的,因为*p 表示地址为p 的指针的(整数)值,该值是int 而不是address of an int(即,不是pointer to an int)

【讨论】:

  • 因为*p表示地址为p的指针的(整数)值,所以该值是int而不是address of an int
【解决方案2】:

类型是int *。所以如果一般模式是:

T a;
T b;
a = b;

那么使用T = int *,模式是:

int * p;
p = &n;     // n is an int

类型说明符中的“*int * 不应与几乎完全不相关的一元运算符混淆,后者也称为“*” .

【讨论】:

    【解决方案3】:

    当你输入时

        int *p;
    

    您正在声明指针 p。 声明后再次使用 * 将取消引用指针。 所以

        *p = &a;
    

    会说“指针 p 中的值 = 对值 a 的引用”

    正确的解决办法是

        int *p;
        p = &a
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-01
      • 2022-06-11
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 2020-11-20
      • 2011-09-06
      相关资源
      最近更新 更多