解释以下语法,我无法理解这一点

时间:2013-09-07 15:59:48

标签: c pointers syntax

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

这种语法是正确的,但是当我们这样写时

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

第三行是错误,我知道但是,为什么可以在第一个代码中执行此操作

   int *p=&a;

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

3 个答案:

答案 0 :(得分:3)

类型为int *。因此,如果一般模式是:

T a;
T b;
a = b;

然后使用T = int *,模式为:

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

输入

时输入

    int *p;

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

    *p = &a;

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

正确的解决方案是

    int *p;
    p = &a