1. 程式人生 > >c++ 指標,char*[]c,char**cp[],char***cpp

c++ 指標,char*[]c,char**cp[],char***cpp

輸出:WORLD,LO,HI,EW

第一個printf:由於char***cpp,可以讀成cpp為一個指向char**型別的指標,並且初始化為cp,而cp是一個指標陣列,數組裡面儲存的型別為char**,也就是cpp指向cp[0],故*cpp=cp[0];因此++cpp使得cpp指向cp[1],故*++cpp=cp[1];而cp[1]是一個指向c[2]的指標,因此*cp[1] = c[2],故**++cpp=*cp[1]=c[2],故輸出WORLD; 第二個printf:由優先順序可得知,單目運算子高於算術運算子;而*和++是單目運算子,+是算術運算子,又cpp本身是指向的cp[1],故++cpp使得cpp指向cp[2],故*++cpp則為cp[2],而此時的cp[2]是一個指向c[1]的地址,故對指向c[1]的指標cp[2]進行--,故使得cp[2]指向的是c[0],故*--*++cpp+3=*--cp[2]+3=c[0]+3,而這裡的c[0],其實存放的是指向HELLO字串的指標故c[0]+3,使得該指標指向HELLO中的第二個L的位置,故輸入LO; 第三個printf:由於cpp目前指向的是cp[2],而cpp[-2]是等於*(cpp-2),而在第二個printf時cpp指向cp[2],則*(cpp-2) = cp[0](注:這裡cpp-2後,cpp本身的指標地址沒有改變,因此在第四個printf中,cpp依舊是指向cp[2]),又cp[0]是一個指向c[3]的指標,對cp[0]進行*運算,使得*cp[0]=c[3],故**(cpp-2)=*cpp[-2]=c[3],同時c[3]是一個指向SAYHI的指標,故c[3]+3,使得指向H的位置,故輸出HI; 第四個printf:在第三個printf並沒有改變cpp的地址,故cpp依舊是指向cp[2],又cpp[-1][-1]+1=*(*(cpp-1)-1)+1,故cpp-1,則cpp指向cp[2],故*(cpp-1)=cp[1];此時的cp[1]是一個指標,指向c[2],故cp[1]-1是從指向c[2]的指標地址-1,故是指向c[1],則*(*(cpp-1)-1)=*(cp[1]-1)=c[1],故cpp[-1][-1]+1=*(*(cpp-1)-1)+1=c[1]+1,此時的c[1]同樣是一個指標,故c[1]+1是指向NEW中的E的位置,故輸出EW。

相關推薦

C指標原理(7)-C內嵌彙編

如何在內聯彙編中訪問C程式的區域性變數呢,請看下面這段程式碼。 #include <stdio.h> int main(void){ //不使用全域性變數,必須使用擴充套件GNU的asm //格式為:asm("彙編程式碼":輸出位置:輸入位置:改動的暫存器列表) //a為eax

C指標原理(9)-C內嵌彙編

我們使用m標記可以直接在記憶體中對數進行操作,前面的例子對變數進行操作時都需要將變數值儲存在要修改的暫存器中,然後將它寫回記憶體位置中. #include <stdio.h> int main(void){ int xa=2; int xb=6; asm volatil

C指標原理(13)-C指標基礎

規範路徑格式,win32(windows環境下,路徑之間的各個目錄分隔將“\”改為"/",用“/”分隔,這樣的好處是在UNIX和WINDOWS都相容,而且也簡化了目錄表示。 #ifdef _WIN32 static char normalize_slashes(char path){  &nbs

C指標原理(14)-C指標基礎

make與makefile make是一個工具程式(Utility software),經由讀取叫做“makefile”的檔案,自動化建構軟體。它是一種轉化檔案形式的工具,轉換的目標稱為“target”;與此同時,它也檢查檔案的依賴關係,如果需要的話,它會呼叫一些外部軟體來完成任務。它的依賴關係檢

C指標原理(15)-C指標基礎

簡單C指標 指向整數的指標,以及指標的指標 [email protected]:~ % vim test1.c #include <stdio.h> int main(void){     

C指標原理(17)-C指標基礎

指標本身也是一種變數,支援常用的運算。比如加、減 #include <stdio.h> int main(void){         int i;   &nb

C指標原理(16)-C指標基礎

2、指向陣列的指標 #include <stdio.h> int main(void){         int i;      

C指標原理(24)-C指標基礎

取自netbsd中的原始碼,檢查運算溢位,用C語言實現,方法很精妙 /*   hide bintime for _STANDALONE because this header is used for hpcboot.exe,  which is built with compilers

C指標原理(36)-C快速入門

一、C簡介  1、C語言簡介 C語言是一門語法 精簡的語言,它的關鍵字僅有32個,C語言以main函式為主函式,程式編譯執行後後,執行的就是main函式的內容,因此,縱觀很多C語言程式,形成了一道有趣的風景線:標頭檔案和許多c程式碼檔案以main函式為中心和起始點構造,在main函式中

C指標原理(38)-C快速入門

為增加遊戲的趣味性,待猜的數字可使用一個產生1-500以內的隨機整數,可按以下方式計算這個整數(%為取餘操作): 1-500以內的隨機整數=隨機整數%499+1 可藉助stdlib.h中定義的srand函式來生成公式右邊所需要的隨機數,該函式需要一個數值做為產生隨機數的種子(也就是這個函式的唯一個引數),

c++ 指標char*[]cchar**cp[]char***cpp

輸出:WORLD,LO,HI,EW 第一個printf:由於char***cpp,可以讀成cpp為一個指向char**型別的指標,並且初始化為cp,而cp是一個指標陣列,數組裡面儲存的型別為char**,也就是cpp指向cp[0],故*cpp=cp[0];因此++cp

C學習之路-scanf輸入char型別直接跳過變數定義說明!

一:定義一個char型別變數的時候,如果沒有初始化為常量,預設值為空字元,對應ASCII為0,所佔記憶體為1個位元組 二:定義一個int型別變數的時候,如果沒有初始化為常量,預設值為 0,所佔記憶體為4個位元組 三:定義一個數組型別變數的時候,如果沒有初始化,每個元素的值都是

關於 C#呼叫cC#的byte[]傳入C庫的方法和將C庫的char*向上傳入C#的回撥函式byte[] 的方法

需求         使用C#開發,因某種原因,寫了C庫Dll,使用C#抓圖資料傳入C,將C庫收到的圖片資料向上傳入C#回撥函式。   當前現狀         C#中將byte[]轉換成I

C#接收C++動態庫返回字串char*C#端如何接收並得到正確的字串

最近呼叫動態庫傳資料,發現C#接收C++動態庫返回字串char*,在C#端設定對應型別為string無法接收到正確值,最後想到在C#端先用位元組陣列接收返回的字串,然後再將位元組陣列轉換為對應的字串,資料接收終於正確 首先開啟VS2012,新建專案->Visua

C++物件記憶體模型2 (虛擬函式指標虛擬函式表)

C++物件記憶體模型2 (虛擬函式,虛指標,虛擬函式表) 從例子入手,考察如下帶有虛擬函式的類的物件記憶體模型: class A { public: virtual void vfunc1(); virtual void vfunc2(); void func1();

Problem C: 指標:有n個整數使其前面各數順序向後移m個位置最後m個數變成最前面m個數

#include<stdio.h> int move(int *x,int n,int m) { int t[255]; int i; //int *p;指標迴圈變數p for(i=0;i<n;i++) t[i]=x[i];

C++指標變數地址

指標是C和C++的重點,也是後面學習資料結構的基礎,因此深刻理解指標的概念很重要。但是指標的概念比較抽象,難於理解,而且一些複雜的程式中都是離不開指標的,如果不能理解指標,那麼就不能理解較為複雜的程式了,作者結合了自己學習C++的經驗,對指標,指標變數,地址作如下闡述。 1.什麼是指標: &

C語言查缺補漏(六)記憶體空間指標

忽略點六:記憶體空間,指標 ​ 介紹記憶體前,我們首先要知道一個由C/C++編譯的程式佔用的記憶體分為哪幾個部分: ​ ——棧記憶體:C語言程式在編譯時會被分配到記憶體的一片有限的連續區域,這部分記憶體會用於儲存區域性變數(函式中宣告的變數),這部分連續區域被成

函式指標c++類的聯想

#include<stdio.h> typedef void (*functionPointerType)(void); typedef struct commandstruct {     char const* name;     functionPoin

C++primer第五版 編寫一個函式令其接收兩個引數一個是int型的數另一個是int指標。函式比較int的值和指標所指的值返回較大的那個。

該題目主要是為了熟悉函式引數的幾種傳遞方式。定義函式形參時,可以定義成傳值(本身)、傳指標(*)、傳引用(&)。如果只是訪問引數值,不對其進行修改,那麼這三種方式都是可以的。例如該題目,就僅僅是比較兩個引數的大小,並沒有對引數本身進行修改,因此傳值和傳指標都是可行的。