[英]What is the difference between these statements in C?
我是 C 的新人。這些有什么區別:
a = b;
和
*a = *b;
(假設兩者都是 integer 指針。)
兩者的相似之處在於,這兩個語句都將右側的值分配給左側。
和
a = b;
你把a
點指向b
指向的同一個地方。 您現在有兩個指向同一位置的指針。
例如,假設我們有以下設置:
int x = 10;
int y = 20;
int *a = &x; // Make a point to the variable x
int *b = &y; // Make b point to the variable y
那么如果你這樣做
a = b;
a
和b
都將指向變量y
。
和
*a = *b;
(假設a
和b
都指向有效的地方)您將b
指向的位置的值分配給a
指向的位置。
如果您了解 arrays,則可能更容易將最后一個作業視為
a[0] = b[0];
它做的事情與*a = *b
完全相同。
還是拿上面的例子來說:
int x = 10;
int y = 20;
int *a = &x; // Make a point to the variable x
int *b = &y; // Make b point to the variable y
然后
*a = *b;
x
和y
的值相同,均為20
。
首先讓我們假設以下聲明:
int x = 1;
int y = 2;
int *a = &x;
int *b = &y;
在此之后,以下所有內容都為真:
a == &x // int * == int *
*a == x == 1 // int == int == int
b == &y // int * == int *
*b == y == 2 // int == int == int
在a = b
之后,以下內容為真:
a == &y
*a == y == 2
b == &y
*b == y == 2
我們已經將b
的值賦給a
,所以現在a
和b
都指向y
。
相反,如果你寫*a = *b
,那么我們會有
a == &x
*a == x == 2
b == &y
*b == y == 2
我們沒有將a
指向y
,而是將b
指向( y
) 的 object 的值分配給a
指向 ( x
) 的 object,因此現在x
和y
的值都為2
。
我會查看以下指南,因為它幾乎可以回答您的問題:
實際上 a=b 和 *a= *b 沒有區別。兩者是相同的。這里 a 和 b 是點不同的元素。
當你寫聲明時:
*a=*b
也就是說b的指向元素的值賦值給了a。 當你寫這個聲明時:
a=b
這意味着 b 包含的元素的地址現在分配給 a。 所以那些是一樣的。
這里的代碼可以更好地理解:
#include<iostream>
using namespace std;
int main()
{
int x=10,y=20;
int *a,*b;
a=&x;
b=&y;
a=b;
cout<<*a<<" "<<*b<<endl;
a=&x;
b=&y;//for change the value of a and b we assign again
cout<<*a<<" "<<*b<<endl;
*a = *b;
cout<<*a<<" "<<*b<<endl;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.