C語言中“指針”和“指針變量”的區別,以及如何區分 * 得用法【轉】


首先需要明確一個基本概念:在C語言中 *  與  &   這兩個符號在不同情況下所表達的含義是不一樣的

一、首先我們要對一些潛在的計算機只是有一定的了解:(或許這就是吃蟲子和吃飼料的區別吧,這里有篇B站說的挺有道理與大家共勉https://www.bilibili.com/video/av30153849)

我們再定義一個變量 a 時,變量 a 本質上代表一個存儲單元,CPU通過該存儲單元的地址訪問該存儲單元中的數據。所以a本來代表兩個值:存儲單元的地址和儲單元中的數據。於是就有了二異性。為了消除這種二義性,C語言規定a表示存儲單元中的數據,&a表示存儲單元的地址。a存儲單元中的數據可以是一個普通數值,也可以是另一個存儲單元的地址,比如:a = &b; 語句就是將b的存儲單元的地址存入a存儲單元中。

在C語言中  *  和  &   兩個符號在不同情況下的含義是不一樣的

1.指針的定義和初始化

(1)&a: 取地址符(單目運算符):在此時,&的含義是去變量a的地址

         a&b: 按位與(雙目運算符):在此時 & 是一個單目運算符

         *的三種用法:

         (1) 乘法:3*4=12:這種情況是作為算術運算符出現

         (2) int *p=&a; //定義指針變量:此時為初始化指針變量,int *p定義了一個指向int類型指針p(我們使用*符號把p聲明為指針),並初                                                             始化p使其指向int類型的變量a,這里&num中的&是取地址操作符,當&作用於一個對象上時,它返                                                               回了該對象的地址,

         (3) *p //解引用 :在這里 * 的作用是解引用(這里解引用的意思可不太好理解,正確的說法應該是   *運算符給出指針變量p中                            存儲的地址上存儲的值(或者說是給出指針p指向的地址上存儲的值))由於在C語言中所有的變量都需要先定義聲明后使用,                    要求p對應的存儲單元中的數據一定是另一個存儲單元的地址,於是,*a表示另一個存儲單元中的數據。

              (這里*操作符為解引用操作符,它返回指針p所指的對象(左值)。

               我們可以對*p賦值(對左值賦值),從而改變p所指的地址上所保存的值)

(2)int *p=&a; //定義整型指針變量(p)保存整型地址值

         *p=100; //間接訪問符(解引用)通過p間接訪問變量a的值並把a的值賦為100 

(3)int v2=0,*q=&v2;   等價於  int v2=0,*q;  q=&v2;

 

關於“指針”和“指針變量”比較嚴格的說法是這樣的:
系統為每一個內存單元分配一個地址值,C/C++把這個地址值稱為“指針”。如有int i=5;,存放變量i的內存單元的編號(地址)&i被稱為指針。
“指針變量”則是存放前述“地址值”的變量,也可以表述為,“指針變量”是存放變量所占內存空間“首地址”的變量(因為一個變量通常要占用連續的多個字節空間)。比如在int i=5;后有一句int *p=&i;,就把i的指針&i賦給了int *型指針變量p,也就是說p中存入着&i。所以說指針變量是存放指針的變量。
有一個事實值得注意,那就是有不少資料和教科書並沒有如上區分,而是認為“指針是指針變量的簡稱”,如對int *p=&i;的解釋是:聲明一個int *型指針p,並用變量i的地址初始化;而嚴格說應該是聲明一個int *型指針變量p才對。所以有時看書要根據上下文理解實質,而不能過於拘泥於文字表述。

 

https://blog.csdn.net/u014774853/article/details/52877655   char** p指針的指針意思詳解

https://blog.csdn.net/txj236/article/details/52325723    https://blog.csdn.net/wofreeo/article/details/80604917    解引用的通俗解釋
---------------------
作者:一眼十年ing
來源:CSDN
原文:https://blog.csdn.net/qq_26606969/article/details/82872693
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM