好老初学者:指针

时间:2016-09-29 07:56:43

标签: c pointers

我目前正在学习C并且达到了要点(哈哈...),我正在学习指针。我想我已经对它们了解了一些,我想我得到了它们的概念。

如果我有一个名为“c”的指针和一个名为“a”且值为5的整数,我会执行以下操作:

*c = a;

我将指针c的值(因为我使用的是asterik符号)设置为a的值,即为5.所以* c在此之后为5且c等于a的内存地址 - 正确吗?

以下情况如何:

c = &a;

我只是将存储a值的内存地址传递给指针。 这两项行动是否相同?从我的观点来看,他们也这样做 - 这是正确的吗?

4 个答案:

答案 0 :(得分:4)

*c = a;

你最终会得到这个:

+---+     +---+    +---+
| A |     | C |    | ? |
+---+     +---+    +---+
| 5 |     | @ |    | 5 |
+---+     +-+-+    +-+-+
            |        ^
            |        |
            +--------+

Howerver with:

c = &a;

你最终会得到:

+---+     +---+
| A |     | C |
+---+     +---+
| 5 |     | @ |
+---+     +-+-+
  ^         |
  |         |
  +---------+

因此,在这两种情况下,您都会*c == 5,但不同的是 c指向

答案 1 :(得分:1)

几乎。请记住,你要说的第一个:“把'c'指向的内存部分取为5”。因此,在将其设置为5之前,需要指定内存的哪一部分。因此,您实际上有两个不同的变量('a'和'c'指向)。

在第二种情况下,您只是指定'c'指向'a'。所以,你会再次指向一个值5,但现在你只有一个变量'a'和指向同一个内存空间的指针

答案 2 :(得分:1)

  

如果我有一个名为" c"的指针和一个名为" a"的整数有价值的   我做了以下几点:

     

*c = a;我将指针c的值(因为我使用的是asterik符号)设置为a的值,即为5.所以* c之后为5   和c等于 - 正确?

的内存地址

不,<{> c指向的变量的内容将获得变量a的值。指针本身不会改变。

  

以下情况如何:

     

c = &a;我只是传递a值的内存地址   存储到指针。

这会将指针c本身更改为指向变量a

  

这两项操作是否相同?从我的观点来看,他们也这样做 - 这是正确的吗?

不,第一个更改任何c点的值,第二个更改指针指向的内容。

一个重要的区别是第一个(*c = a)要求c有效 - 即实际指向一个对象)。第二个使c成为有效指针,覆盖其先前的值。

答案 3 :(得分:0)

如果您使用的是*c=a,则会为c指向的内存地址分配5,如果更改a的值,则不会影响c的值}。

如果您使用c=&a而不是c开始指向a的内存地址,而您更改了a的值,则会更改c的值1}}指向(*c)。