您現在的位置是:電腦技術吧?>? 故障問題 ??>??指針的用法,this指針的用法??>??正文詳情

指針的用法,this指針的用法

枚雨伯2019-11-18 11:00:38 人圍觀
簡介C 指針如何使用C 的指針?在C 中,指針的使用頻率更高。對于C 中大量的指針用法,有必要搞混。今天,綠茶編輯器總結了指針在C 中的用法,并將其呈現給大家,希望c語言指針用法

C 的指針怎么用?在C 中,指針用得比較多,對于里面眾多的指針用法,不免弄得有些糊涂。

今天,綠茶小編對C 中指針的用法進行了整理匯總,展現給大家,希望對大家有所幫助。

  C 程序設計重要基礎就是類和對象,對象指針是很重要的一部分,包括指向對象的指針、指向對象成員的指針、this指針、指向對象的常指針、指向常對象的指針等。

  用法1、指向對象的指針  定義:對象空間的起始地址就是對象的指針。

  說明:在建立對象時,編譯系統就為每個對象分配一定的存儲空間以存放其成員,不過注意,在一般情況下不同對象的數據存儲單元中存放的數據成員是不相同,而不同對象的函數代碼卻是相同的,也就是說,它們的函數代碼是共享的。

這時我們可以定義一個指針變量用來存放對象的指針。

  定義指向類對象的指針變量的一般形式是:  類名 *對象指針名;  如對于與個Time類對象,我們可以有:  Time t;  Time *p;  p=t;  我們就可以通過對象指針訪問對象和對象的成員,假如所定義的類中有數據成員hour、minute、sec,成員函數有gettime(),則  (*p).hour 即為p指向對象中的hour成員,相當于t.hour  (*p).gettime() 即為p指向對象中的成員函數gettime(),相當于t.gettime()  也可以用如下形式:  p-hour 和 p-gettime()和上面是等價的。

  用法2、指向對象成員的指針  (1)指向對象數據成員的指針  在C中我們學過指向普通變量的指針變量,在C 中定義指向對象數據成員的指針變量的方法和定義指向普通變量的指針變量方法相同,其一般形式為:  數據類型名 *指針變量名;  如:  int *p;  p=t.hour; //將對象t的數據成員hour的地址賦給p,p指向t.hour  (2)指向對象成員函數的指針  定義指向對象成員函數的指針變量和定義指向普通函數的指針變量不同。

  在定義指向普通函數的指針變量時我們可以這樣定義:  void (*p)();  p=fun;  (*p)(); //調用fun函數  然而編譯系統要求在將函數地址賦給指針變量時必須滿足三個條件:  函數參數類型及個數要匹配  函數返回值的類型要匹配  所屬的類要匹配  顯然在上面的p與類是無關的。

為了滿足第三條,我們可以為指針指定類,故定義指向對象成員函數的指針變量一般形式為:  數據類型(類名::*指針變量名)(參數表列);  可以讓指針指向公用的成員函數,如:  void (Time::*p)(); //定義指向Time類對象成員函數的指針變量p  p=Time::gettime; //把Time類的公用成員函數gettime()地址賦給指針變量p  (t.*p)(); //調用Time類對象t的成員函數gettime()  注意:因為成員函數不存放在對象空間中,多個同類對象共享此成員函數代碼,所以在將成員函數的入口地址賦給指針變量是應寫成:  指向對象成員函數的指針變量=類名::成員函數名;  在成員函數名后面沒有(),如果寫成p=Time::gettime()是錯誤的。

  用法3、this指針  在每個成員函數中都包含了一個特殊的指針,稱為this,它是指向本類對象的指針,它的值是當前被調用成員函數所在對象的起始地址。

之所以有這個指針,是因為為了保證同類的不同對象的成員函數引用的是指定對象中的數據成員,它是系統自動實現的。

  如定義一個求體積的函數  int box::vol()  {return(height*width*length);}  假如已經定義了對象t,當調用成員函數t.vol()時,編譯系統就把對象t的起始地址賦給this指針,于是在成員函數引用數據成員時,根據指針this就可以引用到對象t的數據成員。

所以C 把上面的函數處理成  int box::vol()  {return(this-height*this-width*this-length);}  由于this的值是當前被調用成員函數所在對象的起始地址,所以可以寫成  int box::vol()  {return((*this).height*(*this).width*(*this).length);}  所以在調用成員函數t.vlo()時,實際的調用方式為t.vol(t),不過對象t的地址傳給this指針是由系統自動完成的,不需人為加上。

  用法4、指向對象的常指針  將指向對象的指針變量聲明為const型且進行處始化,這樣指針值始終保持為其初值,不能改變其指向。

  如:  Time t1(8,8,8),t2;  Time *const p=t1; //常指針p指向對象t1  p=t2; //試圖改變p的指向,非法  由上面我們可以看出定義指向對象的常指針的一般形式為:  類名 *const 指針變量名=對象的起始地址;  注意:指向對象的常指針變量的值不能改變,但可以改變它所指向對象中的數據成員的值。

  常指針一般用作函數的參數,這樣就不允許在函數執行過程中改變指針變量的值,使其始終保持指向原來的對象。

  用法5、指向常對象的指針變量  首先回顧一下指向常變量的指針變量,其一般形式為:  const 類型名 *指針變量名;  如:  const char *p;  如果一個變量已經被聲明為常變量,那么只能用指向常變量的指針變量去指向它,而不能用一般的指針變量。

另外,指向常變量的指針變量除了可以指向常變量外,還可以指向未被聲明為const的變量,但也不能通過該指針改變其值。

例如:  char c='a' //定義字符變量c,未聲名為const  const char *p; //定義指向常變量的指針變量p  p=c; //p指向字符變量c  *p='b'; //非法  c='b'; //合法  說明:上例中,指針變量p指向字符變量c,并不說把c也聲明成常變量,而只是說在通過指針變量引用c時,c具有常變量的特征,其值是不能改變的,但c仍然是一個普通變量。

  在指向常變量的指針中,關于函數形參的指針類型有幾點值得注意:  如果函數形參是非const型指針變量,實參只能用指向非const型指針;如果函數形參是指向const型變量的指針,實參則可以是const型的或非const型的指針變量。

換句話說就是指向常變量的指針可以指向const和非const型的變量,而指向非const型變量的指針只能指向非const的變量。

  用指針變量作形參時形參和實參的對應關系表  下面說到正題,指向常對象的指針變量和指向常變量指針變量類似。

  如果一個對象已經被聲明為長對象,只能用指向常對象的指針變量指向它,而不能用一般的指針變量指向它。

  如果定義了一個指向常對象的指針變量且使它指向一個非const的對象,其指向的對象不能通過指針來改變。

  如果定義了一個指向常對象的指針變量,是不能通過它改變所指向的對象的值的,但是指針變量本身的值是可以改變的。

  如:  Time t1(8,8,8),t2; //定義對象  const time *p=t1; //定義指向常對象的指針p,并使它指向t1  p=t2; //合法,指針p指向對象t2  所以當我們希望在調用函數時對象的值不被修改,我們就可以把形參定義為const型的指針變量,同時用對象的地址作實參(對象可以是const或非const型);當要求對象不僅在調用函數中不被改變,而且在程序執行過程中也不發生改變,我們就把它定義為const型。

所以指向常對象的指針最常用于函數的參數,以保護形參指針所指向的對象在函數執行過程中不被修改。

  以上就是綠茶小編收集的C 指針用法的總結,應該對大家學習C 應該是很有幫助的。

版權聲明:本文由 枚雨伯 整理編輯。

原標題:數組指針的用法,指針如何使用

轉載注明出處:http://www.dn9ww09s.icu/fault/13481.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • datauser是什么意思,userdata是什么文件

    datauser是什么意思,userdata是什么文件 相關圖片91userdata是什么意思用戶數據是指用戶數據,它是計算機中的系統文件之一。如果刪除UserData生成的XML并再次打開頁面,JS將報告無效數據UserData數據是由計算機操作生成的五件套里userda...

  • 酷炫的網站,國內酷炫的網站

    酷炫的網站,國內酷炫的網站 相關圖片酷炫在HTML5出現之后,它以炫目華麗的視覺效果吸引了人們的眼球。許多令人驚奇的想法很容易實現。今天,我們收集了21個獨特的HTML5 CSS3網站來展示你的膝蓋。炫酷網站設計...

  • 12306 常用聯系人上限,12306常用聯系人上限是多少

    12306 常用聯系人上限,12306常用聯系人上限是多少 相關圖片12306添加常用聯系人在購買火車票和高鐵車票時,出于安全考慮,我們將使用12306官方應用程序購買車票。為了方便起見,想買票的小伙伴通常會加入普通聯系人一起買票。但是,需要注...

  • 圖形元件,怎樣創建圖形元件

    圖形元件,怎樣創建圖形元件 相關圖片圖形元件的作用同步一天的客戶要求您在網站的頁面上創建公司角色徽標。您可以使用多個關鍵幀和修補動畫沿引線設置其角色(嵌套在組件中)的動畫,將其作為最終版本提供給客戶...

  • 楊虎圍匡是什么意思,四上四下是什么意思

    楊虎圍匡是什么意思,四上四下是什么意思 相關圖片processon教程Processon是一個在線思維導圖制作平臺。您可以直接使用processon online構建思維導圖、流程圖和其他內容,而無需下載。這是一個非常強大和易于使流程圖processon導出...

  • HTML語義化,HTML語義化的理解

    HTML語義化,HTML語義化的理解 相關圖片html語義化標簽有哪些家里有一個熊孩子,經常會發生一些意想不到的事情:當他回家時,他會過來對臭爸爸哭笑不得;當你讓他穿上鞋子時,他會把鞋子抬起來扔到樓下孩子的世界里。...

  • excel里怎么做下拉菜單,07excel下拉菜單怎么做

    excel里怎么做下拉菜單,07excel下拉菜單怎么做 相關圖片excel一級下拉菜單怎么做我們通常使用Excel來記錄表格數據。事實上,excel功能強大,并具有其他有趣和實用的功能。例如,許多人已經看到了Excel的下拉菜單,但是他們不知道怎么做1e...

  • 錘子m1,錘子m1參數

    錘子m1,錘子m1參數 相關圖片錘子M1是一款由hammer technology推出的智能手機。最近,很多M1的用戶表示,他們不知道如何檢查M1的功耗以及如何打開開發者選項。接下來,超人軟件將為錘子m1l拆機...

  • 什么是兼容性問題,怎么處理兼容性問題

    什么是兼容性問題,怎么處理兼容性問題 相關圖片此程序存在兼容性問題過去,在制作網頁時,只考慮IE6和FF的兼容性。公司改變了,要求也很高。FF和IE 678應該完全兼容。當單獨遇到hackeie8的時候。當然,使用注釋非常方便如何解決軟...

  • 心悅會員首次激活在哪,心悅v1在哪開通

    心悅會員首次激活在哪,心悅v1在哪開通 相關圖片手機上qq心悅會員圖標新悅會員是指騰訊游戲2011年推出的高端服務俱樂部會員,可享受優質的私人服務特權和尊貴的游戲特權。因為新悅會員可以享受很多游戲特權和優惠,很多玩家都...

熱評文章

  • 網易云分享歌曲短視頻,網易云視頻怎么下載到本地

    網易云分享歌曲短視頻,網易云視頻怎么下載到本地 相關圖片網易云課題網易云音樂不僅可以聽歌曲,還具有有趣的短視頻功能。如何下載網易云音樂短片?現在,超人軟件編輯將介紹如何下載網易云音樂短片,希望對您有所幫助!網易云音樂短...

  • wapi啥意思,wapi需要開啟嗎

    wapi啥意思,wapi需要開啟嗎 相關圖片wapliPhone7發布后,用戶開始發現WLAN中有一個以前從未出現過的功能WAPI。什么意思?有什么用?WAPI是WLAN加密證書,全名是WLAN auth啟用wapi耗電嗎...

  • 自適應網頁設計的步驟,自適應網頁設計教程

    自適應網頁設計的步驟,自適應網頁設計教程 相關圖片自動網頁設計自適應布局將成為未來的發展趨勢。本設計滿足以下要求:1。根據用戶窗口的大小進行更改。在一定寬度范圍內提供穩定的視覺體驗。缺點是與老的和非標準的瀏覽器兼容...

  • chaton,miaouchaton

    chaton,miaouchaton 相關圖片mon chaton很多人覺得聊天有點奇怪。看著手機上的聊天,他們不知道是否可以刪除。Chaton實際上是三星推出的一款聊天軟件Chaton是一款跨平臺的聊天軟件,IOS,Andrchaton是什么軟件...

  • 如何導入導出ABAP程序,發那科程序導入和導出

    如何導入導出ABAP程序,發那科程序導入和導出 相關圖片如何進行數據庫的導入和導出對于我們的審計人員來說,Oracle數據庫應該是熟悉和陌生的。我們所熟悉的是,在計算機輔助審計中,經常從被審計單位的Oracle數據庫中導出數據,然后導...

  • 3dmax2015序列號和密匙,3dmax的序列號和密鑰

    3dmax2015序列號和密匙,3dmax的序列號和密鑰 相關圖片3dmax2014序列號激活碼3DMAX是一款經典的三維動畫渲染制作軟件,從事設計行業的朋友不會陌生。3dmax2012是一個經典的版本,它提供了一個新的創造性的工具集,增強了迭代工作流和加3d...

  • 蘋果id是什么意思,appleid忘記了怎么辦

    蘋果id是什么意思,appleid忘記了怎么辦 相關圖片蘋果id此時無法創建您的賬戶如果蘋果手機用戶想很好地使用iPhone,首先需要了解一個概念,即什么是蘋果ID蘋果ID是蘋果下的一個安全認證系統。它將所有功能集成到一個帳戶中,允許...

  • js和css做網頁,css和js

    js和css做網頁,css和js 相關圖片js添加css最近,我們可以在網站和博客上找到各種各樣的動畫效果。Codyhouse介紹了這些CSS和JavaScript編碼教程,因為每個文件都可以作為一個整體下載,它可以html css js電子版...

  • sublime text3是什么,sublimetext

    sublime text3是什么,sublimetext 相關圖片sublime text怎么運行普通用戶可能不知道sublime text 3是什么,但對于編碼人員來說,sublime text 3必須很熟悉。Sublime文本:它是一個經典的代碼編輯器,sublime text使用教程...

  • HTTP,HTTP是什么

    HTTP,HTTP是什么 相關圖片HTTP下載HTTP定義了與服務器交互的不同方法。有四種基本方法:獲取、發布、放置和刪除。URL的全名是資源描述符。我們可以這樣認為:URL地址用于描述網絡上的資源,而htHTTP協議的功能...

關注微信

变脸官网查询