我目前正在学习C并且达到了要点(哈哈...),我正在学习指针。我想我已经对它们了解了一些,我想我得到了它们的概念。
如果我有一个名为“c”的指针和一个名为“a”且值为5的整数,我会执行以下操作:
*c = a;
我将指针c的值(因为我使用的是asterik符号)设置为a的值,即为5.所以* c在此之后为5且c等于a的内存地址 - 正确吗?
以下情况如何:
c = &a;
我只是将存储a值的内存地址传递给指针。 这两项行动是否相同?从我的观点来看,他们也这样做 - 这是正确的吗?
答案 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
)。