簡體   English   中英

C中這些語句有什么區別?

[英]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;

ab都將指向變量y


*a = *b;

(假設ab都指向有效的地方)您將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;

xy的值相同,均為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 ,所以現在ab都指向y

相反,如果你寫*a = *b ,那么我們會有

 a == &x
*a ==  x == 2
 b == &y       
*b ==  y == 2  

我們沒有將a指向y ,而是將b指向( y ) 的 object 的值分配給a指向 ( x ) 的 object,因此現在xy的值都為2

我會查看以下指南,因為它幾乎可以回答您的問題:

C++中指針變量和引用變量有什么區別?

實際上 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM