中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

指針總結基礎

發布時間:2020-06-21 10:40:55 來源:網絡 閱讀:266 作者:flag不會倒 欄目:編程語言

如何定義指針?

存放內存單元的地址,該地址被形象的稱為指針,存放在指針中的值都被當成地址處理。而指針變量就是一個存放地址的變量。與普通的變量相同把它看作一個新的類型就好。

如何編址?

在32位平臺下,有32根地址線,有2^32個排列組合,因此可編2^32(4G)個地址。編址的最小單位是字節。
由于int變量占四個字節,取地址取最低地址表示。(double、long同理)。
在32位機器上,地址是32個0或1組成的二進制序列,(32/8)那地址就得用4個字節空間來存儲,所以一個指針變量的大小就應該是4個字節。
同理在64位機器上,有64根地址線,(64/8)因而地址要用8個字節空間來存儲。

指針類型表示:

type+ * (二級指針:int **,type是int*)。type*****類型的指針是為了存放某類型變量的地址。

指針類型的意義:

1.指針類型+-整數:

指針的類型決定了指針向前或向后走一步有多大距離:加減上所指向類型占字節的大小。因而加1或減一是令指針指向了下或上一個一個變量、數組、結構體。。。。
看下面例子:

int n = 10;
    int *pi = &n;
    char *pc = (char *)&n;
    printf("%p\n", pi);                       ---> 00D8F9D0
    printf("%p\n", pi+1);                    --->00D8F9D4
    printf("%p\n", pc);                        --->00D8F9D0
    printf("%p\n", pc+1);                    --->00D8F9D1

答案符合正如我們解釋的那樣
ps:二級指針、三級指針..他們指向的類型都是指針類型,所以加一或減一都會加或減4個字節。(指針所占空間大小為4B)

2.指針解引用:

指針的類型決定了,對指針解引用的時候有多大權限(能訪問幾個字節),例如:char* 指針解引用就只能訪問一個字節,而int*的指針就能夠訪問4個字節。

  int n = 0x11223344;
    int* pi = &n;
    char* pc = (char*)&n;          //解引用只能指向一個空間
    *pc=0x55;  
    printf("%x\n", n);       --->11223355   
    *pi = 0;
    printf("%x\n", n);     --->0

指針的運算

指針-指針:

代表兩個指針之間經歷的元素。
eg:

int a[10];
       int *p=&a[0];
       int *q =&a[9];
       則:p-q=9不是(4*9=36)
       若 char *p=(char*)&a[0];
           char *q =(char *)&a[9];
            p-q=36;  //元素個數由指針指向類型決定。
指針的關系運算:

標準規定:允許指向數組元素的指針與指向數組最后一個元素后面的那個內存位置的指針比較,但是不允許與指向第一個元素之前的那個內存位置的指針比較。
對比:

for(vp=&values[N_values];vp>&values[0];)      //比較都是合法的
{
       *--vp=0;
}

for(vp=&values[N_values-1];vp>=&values[0];vp--)      //vp=-1時比較后不成立然后才退出循環!
{
       *vp=0;
}

二級指針:

存放一級指針地址的變量。
因為指針也是變量,既然是變量,那他也肯定有地址,有地址,所以也可以被保存起來,保存一級指針地址的空間,就是二級指針。
其關系表示
指針總結基礎

數組與指針:

兩者本質上沒有什么關系!
數組名與數組地址及數組首元素的關系:數組地址與數組首元素地址在數值上相等。但意義上不同。(數組地址加一加過了整個數組,而首元素地址加一只加過了一個元素)
數組名在取地址符號后,及在sizeof中單獨使用時代表整個數組,剩下的情景都表示數組中首元素地址。
數組表示中 數組名稱【元素下標】=*(數組名稱+元素下標) 此處的數組名稱表示首元素地址。

個人心得:指針就是一個存放地址的變量,二級指針也是個變量,三級四級都是,所以不要總把指針看作個例。
數組和指針沒有什么關系,只是在某些表達形式上,有很多相同之處。

指針數組

一個數組,里面存放元素的類型都是某類型指針,數組內每個空間都存放一個地址,指向某內存空間。

int*  arr1[10];  //×××指針的數組
char* arr2[4]; //一級字符指針的數組
char** arr3[4];//二級字符指針的數組
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玛纳斯县| 延川县| 德阳市| 普兰店市| 沿河| 满洲里市| 水城县| 兴文县| 叙永县| 泗洪县| 屏东市| 钦州市| 文安县| 台湾省| 界首市| 天峻县| 南和县| 祁门县| 阳信县| 筠连县| 万全县| 进贤县| 利辛县| 北安市| 尤溪县| 呼玛县| 新沂市| 家居| 科技| 乌兰县| 贵港市| 胶州市| 乌兰察布市| 南溪县| 如东县| 千阳县| 全州县| 曲周县| 红安县| 宁晋县| 黑龙江省|