91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

指針與數組的緣定今生

發布時間:2020-07-10 11:38:05 來源:網絡 閱讀:413 作者:Wsundaysky 欄目:編程語言
在講指針時,我先講講我使用的編譯器gcc。我是比較喜歡在linux上寫C語言的。

gcc最基本的用法:
                -c:只編譯,不鏈接成可執行文件編譯器只是由出入的.c等源代碼文件生成.o為后綴的目標文件,通常用于編譯不包含主程序的之程序文件
                -o:確定輸出文件的名稱為out_filename,同時這個名稱不能和源文件同名,如果不給這個選項,gcc就要給出預設的可執行文件a.out
                -g:產生符號調試工具(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,我們必須加入這個選項
                -O:對程序進行優化編譯,連接,采用這個選項,整個代碼源會在編譯,連接過程中進行優化處理,這樣產生可執行文件的執行效率可以提高,但是,編譯連接的速度就相對慢一些
                -O2:比-O更好優化編譯,連接,當然整個編譯,連接過程會變得更慢
                -l  dirname:將dirname所指出的目錄加入到程序文件頭文件列表中,實在預處理編譯過程中使用的參數/usr/include
                -L dirname:將dirname所指出的目錄加入到程序函數檔案庫文件的目錄列表中,時在鏈接過程中使用的參數
                -Wall:打開所有的語法檢測錯誤,一般使用這個

#include<stdio.h>與#include"stdio.h"區別
    " ":    用戶的自定義的頭文件一般使用" ",陷在當前編譯目錄或用戶指定的目錄著頭文件,找不到在到系統指定的文件夾找頭文件/usr/include
  < >:系統文件,一般使用<>直接去系統指定的文件夾找頭文件/usr/include

    **指針** (以下是純屬個人對指針的理解和見解,若有錯誤請勿當真)
    概念:地址,內部存儲器的編號,稱為地址。入變量int a的位置編號,變量char  b的位置都是指針。
    指針變量:專門存放地址的變量稱為指針變量
    地址。指針,指針變量都成為指針

    定義變量:
    1.格式[存儲類型]    數據類型   指針變量名
    存儲類型:就是說變量放在內存的位置
    數據類型:聲明這個空間的大小,和地址類型
    變量名:類似匯編的助記符+存放地址 相當于* 0x0xxxxxx0(表示地址)

    用type來表示基本類型
    例如 定義了一個type  a;那么a的類型是什么呢? a的類型就是 type 和空格
    在舉例 type  arr[10];  arr的類型為type [10]; 
    問題來了a的地址呢 是什么類型呢
    答案就是 int *  0X0xxxxxxx ;這個地址類型存儲大小是幾個字節呢,這要根據我們的操作系統,如果你的操作系統是32為那么他的地址存儲大小是4個字節,64位就是8個字節。

    定義一個地址變量 
    格式
      1.存儲類型   數據類型   *指針變量名
      int i,j;
        int *pointer1, *pointer2;
        存儲類型為這個地址變量的存儲位置,數據類型的指向的即使這個地址變量指向的目標地址;
        這樣說可能有點暈了,我簡單來說:指針的作用是什么呢? 就是用來存放地址的,地址是幾個字節呢 ?這要根據你的操作系統,32為為四個字節,64位為八個字節。所以指針變量名的大小為4Byte,但是它指向的空間就是你定義這個變了的大小;我們都按照32bit操作系統來說明。
        例如:
         type  a,*p = NULL;
         p = &a; 
         此時指針p存放著a的地址。用sizeof(p) 他的大小永遠為4Byte,因為a的地址為4個字節,所以P的大小為4Byte。但是這樣做sizeof(*p),他的大小就為type 類的字節。因為使用*通過a的地址來訪問a的大小,故大小就是type類型的大小。
         指針的加減法:
         short  a = 0x100;
         short  *p = &a;
         若a的地址為0x20008000,則
         p+1 = 0x20008002;     
         *p+1 = 0x101
         (int)p + 1 = 20008001;
         (int *)p + 1 = 0x20008004;
         (char *)p + 1 = 0x20008001;
         (char)p + 1 = 0x1;

數組:
數組就是把相同的類型存放在一起。
例如 type a[10]; a的類型就是type [10], a類型存儲空間大小就是type [10]
舉例 int arr[5],a的存儲大小就是四個整型的數據類型放在一起每一個int數據大小為4byte,總共為4*5=20byte此時數組名就有來過兩種含義了,一種是表示整個數組,還有一個表示表示第一個元素。

    為什么這要這樣說呢?
    因為在定義數組的時候就聲明了 數組的存儲大小,存儲大小怎么訪問呢,就是訪問數組的地址,例如sizeof(arr)就是整個數組的大小。但是sizeof(arr+1)

則表示一個元素的大小,為什么回事這樣呢?這是編譯器的做的工作,這個sizeof(arr)情況,編譯器就是認為你訪問的大小就是正個空間大小,如果是arr+1,則認為是type 的類型的加一。

指針與數組

 int *p,arr[10] = {0};
     p = a;
    把數組的第一個元素的地址賦值給p,則p就指向數組的第一個 元素,則p+1則表示這個類型的地址下一個,也就是指向下一個元素的地址。

    ![](https://cache.yisu.com/upload/information/20200311/59/224307.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
         要明白 *p++  (*p)++  *(++p)  (*p++)++   ++(*++p)這幾種關系的含義

二維數組和指針
同樣二維數組名,有兩種含義,一種是第一個元素的地址,另一個是表示整個數組。和一維數組一樣,不同的是sizeof(a[0]) 表示第一行所有元素的空間大小和。這是為什么呢,因為[ ] 是變址符,本來是a的地址,給他變成第一行的首地址,用sizeof來求就是這一行的元素大小之和。
int a[3][3];
sizeof +1

a[0] 12 12
a 36 12
&a[0] 4 12
&a 4 36

向AI問一下細節

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

AI

娱乐| 灵台县| 鱼台县| 玉溪市| 苍南县| 富顺县| 湟中县| 于田县| 靖边县| 格尔木市| 灵石县| 印江| 新化县| 石楼县| 鄂温| 平顶山市| 陈巴尔虎旗| 涡阳县| 屏东县| 上饶县| 桑日县| 安远县| 石柱| 唐山市| 姚安县| 尼勒克县| 栾城县| 辰溪县| 永川市| 同德县| 大理市| 武城县| 永修县| 泰安市| 平邑县| 山西省| 师宗县| 文登市| 镇宁| 平远县| 湾仔区|