C 如何判断星号的使用是否与指针有关?

C 如何判断星号的使用是否与指针有关?,c,pointers,C,Pointers,很难分辨星号与指针的关系 下面是一些让我困惑的代码示例 typedef struct X { int i_; double d_; } X; X x; X* p = &x; p->d_ = 3.14159; // dereference and access data member x.d_ (*p).d_ *= -1; // another equivalent notation for accessing x.d_ 在第五行,我们有(*p).d_*=-1。为什么有两个

很难分辨星号与指针的关系

下面是一些让我困惑的代码示例

typedef struct X { int i_; double d_; } X;
X x;
X* p = &x;
p->d_ = 3.14159;  // dereference and access data member x.d_
(*p).d_ *= -1;    // another equivalent notation for accessing x.d_
在第五行,我们有
(*p).d_*=-1。为什么有两个星号?他们的立场意味着什么

int x = 2;
int* p_x = &x;  // put the address of the x variable into the pointer p_x
*p_x = 4;       // change the memory at the address in p_x to be 4
assert(x == 4); // check x is now 4
在第2行
int*p_x=&x,我们制作了一个新指针,但在第3行
*p_x=4,指针语法仍使用星号。为什么会这样

信用:代码示例

注意:问题是“在C指针语法中,为什么星号会间歇使用?”。我改变了它,以帮助未来的游客

(*p).mem
p->mem

*=
中的
*
是乘法, 它是乘法赋值运算符,与指针无关。
(*p)。mem
p->mem

int a = 10;
a *= -1;
printf("%d\n", a); /* -10 */
*=
中的
*
是乘法, 它是乘法赋值运算符,与指针无关

int a = 10;
a *= -1;
printf("%d\n", a); /* -10 */
+=
-=
*=
/=
等等。。。;它们被称为“复合赋值运算符”

  • Visual Studio 2015 > Visual C++ > C/C++语言和标准库>表达式和赋值> C运算符> C赋值运算符< /LI>
a*=-1
a=a*-1
的缩写

在第2行
int*p_x=&x,我们制作了一个新指针,但在第3行
*p_x=4,指针语法仍使用星号。为什么会这样

例如,在谷歌上搜索“指针教程”并阅读其中的一些内容(特别是带有精美插图的)

+=
-=
*=
/=
等等。。。;它们被称为“复合赋值运算符”

  • Visual Studio 2015 > Visual C++ > C/C++语言和标准库>表达式和赋值> C运算符> C赋值运算符< /LI>
a*=-1
a=a*-1
的缩写

在第2行
int*p_x=&x,我们制作了一个新指针,但在第3行
*p_x=4,指针语法仍使用星号。为什么会这样

例如,在谷歌上搜索“指针教程”并阅读其中的一些内容(特别是带有精美插图的)

  • 为什么有两个星号?他们的立场意味着什么?

    类似于,

    (*p).d_ = (*p).d_ * -1;
    
    就像将一个变量乘以某个值一样

    a = a * 1;
    


    指针是指向某个内存位置的变量

    所以

    在这方面。假设
    x
    的值存储在某个内存中。通过使用
    x
    上的
    &
    运算符,指针
    p_x
    指向该内存<代码>&
提供存储变量的内存

现在,对于指针,您可以在不使用
*
的情况下使用它,这将为您提供它所指向的地址

如果与
*
一起使用,它将取消对指针的引用,这意味着它将给出存储在该指针指向的内存位置中的值。

1)为什么有两个星号?他们的立场意味着什么?

类似于,

(*p).d_ = (*p).d_ * -1;
就像将一个变量乘以某个值一样

a = a * 1;


指针是指向某个内存位置的变量

所以

在这方面。假设
x
的值存储在某个内存中。通过使用
x
上的
&
运算符,指针
p_x
指向该内存<代码>&
提供存储变量的内存

现在,对于指针,您可以在不使用
*
的情况下使用它,这将为您提供它所指向的地址

如果将它与
*
一起使用,它将取消对指针的引用,这意味着它将给出存储在该指针指向的内存位置中的值

在第2int*p_x=&x;行上;,我们制作了一个新指针,但在第3*p_x行= 4.指针语法仍然使用星号。这是为什么 案子

指针只是一个变量,它将指向其他对象的地址作为其值。非指针保存立即数。(例如
int a=5;
)另一方面,在该示例中,指针将保存值
5
位于内存中的地址(例如
int*b=&a;

如果您想要
a
引用的值,您只需提供
a
(例如
int c=a;
),但是,如果您只是尝试分配
c
b
值,您将为
c
分配一个内存地址。要获取指针
b
引用的地址处的值,必须取消引用
b
。因此,要分配
c
b
指向的值,您可以使用
解引用运算符“*”
(例如
int c=*b;

如果要为
b
指向的内存地址分配一个新值,同样适用。如果要替换
a
(当前为
5
)的值,但使用指针
b
,则可以执行
*b=7
(基本上说是将当前由
b
指向的地址处的值替换为
7

如果您还有其他问题,请告诉我

在第2int*p_x=&x;行,我们创建了一个新指针,但在第3*p_x行= 4、 ,指针语法仍然使用星号。这是为什么 案子

指针只是一个变量,它将指向其他对象的地址作为其值保存。非指针保存一个立即值。(例如
int A=5;
)另一方面,在该示例中,指针将保存值
5
位于内存中的地址(例如
int*b=&A;

如果你想