亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Linux C語言指針與內存

難度初級
時長 2小時 5分
學習人數
綜合評分9.60
263人評價 查看評價
9.9 內容實用
9.5 簡潔易懂
9.4 邏輯清晰
  • 653b80e60001ea5807110400.jpg將str指針往下移了三個,將hello中第二個l替換為\0,將字符串提前結束
    查看全部
  • int *p=&a:定義的指針p是整型數據,p++之后,p中的地址就會增加4個字節。

    這就是指針偏移運算,這種方式比CPU直接取地址效率還要高,所以設計程序都會盡可能地采取這種方式。

    p+=3:將指針向下移動3格,如果p是整型,就移動12個字節。(等價于p[3])

    數組和指針的本質都是地址,所以*pa=array,相當于將array數組的地址賦值給pa指針,這樣pa[1]的功能和array[1]的功能就沒有區別了。

    數組是指針常量,
    指針是指針變量,
    指針能實現數組的功能,但是數組不一定能實現指針的功能。
    arry+=2會報錯
    查看全部
    0 采集 收起 來源:指針運算

    2023-10-27

  • gdb命令:

    x/3d? 地址:按照十進制d,連續顯示3個(3)變量的地址(x),默認間隔為4個空格
    查看全部
  • 653b46bc0001a49610660600.jpg“p”是一個地址,則“*p”是到這個地址去取里面的值,“(*p)”表示為一個整體,“(*p)(數據)”若p為代碼段,則調用這個函數,傳參數"數據"進去

    查看全部
  • 最下面的內存最先分配

    最先分配的棧地址反而更大

    棧的特點:先進后出

    靜態變量不在棧里頭,相同變量名稱的靜態變量分別在兩個函數里便為兩個不同變量,屬于每個函數特有的;

    全局變量為所有函數公用的。其地址不變。

    一個函數被多次調用時,靜態變量指向的還是數據段一個固定的地址;即不同函數的count是不同的count,但同一個函數不管調用多少次count,它指向的都是數據段的某個地址。
    查看全部
  • 653b3ff40001011a10660600.jpg653b3ff900015b0410660600.jpg無&符,輸出變量值
    有該符,輸出地址
    查看全部
  • 變量名只是代號,變量的本質是內存;
    在標準的C語言中,不允許直接對內存地址進行操作,只能是對操作系統已經分配給的內存空間進行操作。

    int *p=&a;??? p 指針指向的變量地址; *p? 指針指向的變量值; &p 指針自己所在的地址。既然一個指針保存的是變量的地址,對32位CPU,地址有4個字節,就需要4個內存單元來存儲,所以每次++p在內存里都是跳4格。

    函數調用信息保存在棧(stack)中。 int *pa=&a指將a的地址傳給pa。因此p pa看到的是a的地址(&a)。 而p &pa才能看到pa本身的地址。
    查看全部
  • 653b1ee200012dc910660600.jpg653b1ee400012d4710660600.jpg
    653b1ee8000150c610660600.jpg
    代碼段放編譯后的程序,數據段放常量、變量,中間的綠色是自由可分配空間。
    查看全部
    0 采集 收起 來源:內存管理

    2023-10-27

  • 653b1cf60001799310660600.jpg653b1cf80001bbb910660600.jpg0x表示十六進制
    查看全部
  • 653a5b9c0001544b07110400.jpg加了地址符后的a表示一個地址,*a是去找到該地址下對應的值653a5bd50001715907110400.jpg可以看出0中a為地址,需*a找到對應值
    1中a為確切值
    查看全部
  • gdb?? -help完整顯示各種用法653a575f00012d2407110400.jpg(gdb)start? 開始執行
    紅框為自動設置的斷點為12行處653a57a60001097107110400.jpg(gdb) p a
    分別為printf a?? 即為輸出變量a
    (gdb)? n
    為換到下一行653a5891000105d007110400.jpg
    653a58930001294d07110400.jpg(gdb)? bt?? 查看函數堆棧
    堆棧像書,摞在上面先執行653a594a0001035e07110400.jpg(gdb) f 1
    f為切換棧,即切換到棧1
    單用change,由于形參,兩個函數中a.b不同,無法改變--所以需要指針
    查看全部
    0 采集 收起 來源:gdb工具的使用

    2023-10-26

  • 653a55c700012bd007110400.jpg*a?? 表指針
    &a? 取地址
    查看全部
  • 注意:這里偏移三格指向arrary[0]是因為中間有一個變量i,然后是b,然后才是array[0],而不是array[1]
    查看全部
    0 采集 收起 來源:指針運算

    2022-06-15

  • 指針變量上加*表示:打印其保存的地址指向的值
    查看全部
    0 采集 收起 來源:指針運算

    2022-06-15

  • 不帶&符號:打印變量里面的值
    否則:打印變量的地址
    查看全部
首頁上一頁1234567下一頁尾頁

舉報

0/150
提交
取消
課程須知
本課程是C語言中級課程,為了更好的學習效果: 1、需要有一定的C語言基礎,如果沒有基礎的同學可以看《C語言入門》這門課。 2、本課程是在Linux環境下講解,需要熟悉一些Linux命令。如果不了解的話可以在《Linux C語言編程基本原理與實踐》這門課程中補充
老師告訴你能學到什么?
1、C語言中的指針是怎么回事 2、Linux下gdb調試工具是怎樣使用的 3、指針與內存有著怎樣的關系 4、數組與字符串之間的聯系

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!