![](/img/trans.png)
[英]What is the difference between double and long double data type in c language
[英]Difference between variable and data object in C language?
我正在閱讀 C Primer Plus 並遇到以下我無法理解的行-
指針? 他們是什么? 基本上,指針是一個變量(或者,更一般地說,是一個數據對象),其值是一個內存地址。
僅供參考,我之前遇到過這些行-
考慮一個賦值語句。 它的目的是在內存位置存儲一個值。 數據對象是可用於保存值的數據存儲區域的總稱。 C 標准僅使用術語對象來表示此概念。 識別對象的一種方法是使用變量的名稱。
我試過谷歌搜索但找不到任何東西。這些基本術語讓我感到困惑,所以請幫助我理解這些術語。
數據對象是存儲程序使用的信息的內存位置。
變量是程序中用來引用數據對象的名稱。
所以如果你寫:
int a;
它告訴編譯器創建一個可以容納整數的數據對象,並且在程序中您可以使用名稱a
來訪問該數據對象。
指針是一個數據對象,其值是某個其他數據對象在內存中的位置。 所以如果你這樣做:
int *pa = &a;
要創建一個變量pa
是指一個數據對象,其內容是數據的地址對象創建作為的結果, a
變量聲明。
在 C 中,對象是任何占用存儲空間的東西。 C 2011在線稿:
3. 術語、定義和符號
...
3.15
1 個對象
執行環境中的數據存儲區域,其內容可以表示值
左值是一個表達式,它指定一個對象,以便可以讀取或修改該對象的內容(基本上,任何可以作為賦值目標的表達式都是左值)。 雖然 C 標准沒有定義術語variable ,但您基本上可以將其視為指定對象的任何標識符:
int var;
標識符var
指定一個存儲整數值的對象; 表達式var
是一個左值,因為您可以通過它讀取和/或修改對象:
var = 10;
printf( "%d\n", var );
指針是其值是對象位置的任何表達式。 指針變量是存儲指針值的對象。
int *p = &var;
標識符p
指定一個存儲整數對象位置的對象。 表達式&var
計算結果為對象var
的位置(地址)。 它不是左值; 它不能是賦值的目標(你不能更新對象的地址)。 一元&
運算符的操作數必須是左值。 表達式p
OTOH是一個左值,因為您可以為其分配一個新值:
int y = 1;
p = &y;
printf( "%p\n", (void *) p ); // one of the few places in C you need to cast a void pointer
表達式*p
指定p
指向的對象(在本例中為y
)。 它也是一個左值,因為您可以通過它分配給對象:
*p = 5; // same as y = 5
printf( "%d\n", *p );
所以基本上:
var
、 p
和y
是變量(指定對象的標識符)var
、 p
、 *p
和y
是左值(可以讀取或修改對象的表達式)&var
, p
, &p
&y
是指針表達式(值是對象位置的表達式)p
是指針變量(存儲指針值的對象)你已經有了答案,但如果你想要:
變量:變量可以被認為是為引用您實際對象的持有者分配的名稱,因此當我們說 int x 時,它就像一個不引用任何內容(c 中的垃圾值)的占位符,但是當我們說 int x=10 時; 它用值 10 初始化 x(現在它引用 int 類型的數據對象,在這種情況下,數據對象的名稱將由編譯器本身維護),我們可以使用名稱 x 來訪問值 10。
數據對象:正如您所引用的“數據對象是可用於保存值的數據存儲區域的通用術語。” 即。 記憶位置
指針:基本上,指針就像存儲值的變量,而不是存儲實際值(如 int、float、char ..),它們保存存儲實際值的內存位置的地址,即對數據對象的引用。
“所以當你說 int x 時,你說聲明一個名為 x 的占位符,當你說 int *x 時,你說聲明一個名為 x 的占位符,它可以保存對 int 類型的引用。”
數據對象是存儲數據的對象,我們計算機中的數據對象是Ram中的寄存器。 每個寄存器都有一個地址位置。 寄存器具有 read_lock 和 write_lock 機制。 在這些寄存器中,您可以存儲變量數據和常量數據。 可變數據意味着它可以在整個過程中修改。 意味着,保存變量數據的 Data 對象稱為變量。 變量 read_lock 和 write_lock 被禁用。 這就是為什么您可以在整個過程中修改變量(變量數據對象)的原因。 要識別變量數據對象,您需要為其聲明一個名稱。 例如:int 速度:= 60; 這里的速度是一個變量(變量數據對象),它的大小是 4 個字節。 它只保存整數數據。 變量中的數據在其整個應用過程中是可變的。
在數據對象中,如果您存儲常量數據,則這些數據對象稱為常量。 對於常量數據對象,rd_lock 被禁用,但 write_lock 被啟用。 這就是為什么您可以讀取常量但不能為其賦值的原因。 要標識常量,您需要為其聲明一個名稱。 例如:int const speed = 100; 這里速度是一個常數(常數數據對象)。 速度中的數據在整個應用過程中是不能改變的。這個速度只保存感興趣類型的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.