1. 程式人生 > >指標組合(如指標陣列)的區分及其結構體記憶體大小的計算

指標組合(如指標陣列)的區分及其結構體記憶體大小的計算

指標對於每一位初學者那是苦不堪言,我初學的時也是很頭痛,我認為c語言重要的就是三塊:指標、連結串列和函式,本人覺得此三塊好比劉邦的三傑,在此我先宣告,本文章沒有涉及到連結串列的知識,此文主要是談及指標函式、函式指標和陣列指標、指標陣列的區分以及結構體記憶體大小的計算

指標函式、函式指標和陣列指標、指標陣列的區分

首先這四個字有規律,最後兩個字是什麼說明這四個字主要是什麼,可以把前兩個字看成修飾詞 如:指標陣列,陣列在後說明它是陣列,把“指標”看成修飾“陣列”的詞

  • (指標)陣列(指標):最重要的就是先找(),沒有()再看[ ];

  • (指標)函式(指標):通常找左右(),複雜的如函式指標陣列可能找[]但原理一樣。

1. int *a[10];//沒()看[]說明是陣列,又有*(指標)  最終為指標陣列(陣列中的每一個元素都是指標)

2. int (*a)[10];//以此類推()裡說明是指標,什麼指標呢?後有[]說明是陣列,最終為陣列指標,指向陣列元素的首地址。

3.int *fun();//這是個指標函式,沒有形參

4.int (*fun)(int);//這是函式指標有一個int型的形參,函式返回值型別是int型


5.int (*s[10])(int) 表示的是什麼?
/****************
*左()裡說明是指標陣列
*看右()說明是函式且有一個int型形參,
*最終可得出:表示的是函式指標陣列,每個指標指向一個 int func(int param) 的函式
*****************/

結構體記憶體對齊

結構體記憶體對其三原則

  • 若結構體的第一個成員資料型別是基本型別(比如:指標,int,char ,float double),記憶體分配是從整個結構體的記憶體分配偏移量為0處開始,下面依次的成員變數記憶體分配偏移量,根據它本身位元組大小的倍數開始分配;

  • 如果成員變數資料型別是複雜型別,比如陣列,或者是結構體

//結構體
struct Student
{ 
    int a;
    char b;
    double c;
};

那麼記憶體分配偏移量是從結構體成員變數所佔位元組數最大的倍數開始分配

  • 最後,總位元組數必須是成員變數資料型別最大位元組數的倍數

下面看兩個例子:

struct Data
    {
        char ch;  0
        int year; 4---7
    };

    int b=sizeof(struct Data);
    printf("b=%d\n",b); 
    // b = 8

    struct Stu
    {
        char ch; 0
        int arr[10]; 4---43
        int age;  44---47
    };

    int a=sizeof(struct Stu);
    printf("a=%d\n",a);
   // a = 48

相關推薦

指標組合指標陣列區分及其結構記憶體大小計算

指標對於每一位初學者那是苦不堪言,我初學的時也是很頭痛,我認為c語言重要的就是三塊:指標、連結串列和函式,本人覺得此三塊好比劉邦的三傑,在此我先宣告,本文章沒有涉及到連結串列的知識,此文主要是談及指標函

讓你不再害怕指標的應用-全程模擬+註解第二部分陣列

讓你不再害怕指標的應用-全程模擬+註解(第二部分:陣列)(持續更新) 寫此文章一是為了分享,二是為了溫習! 預計包含的內容為:變數如int  、陣列  、結構體  、列舉 、聯合體、(這個自己也在瞭解)。 軟體:CODE::Blocks  &n

指標8應用指標向函式傳遞陣列

要在函式中使用實引數組元素或改變實引數組元素的值,有三種對應方法 1)實參用陣列名,形參用指標變數。 2)實參用指標變數,形參用陣列名 3)實參和形參都用指標變數 給出一道例題 應用函式與指標,對長度為10的一維陣列進行從小到大排序。 #include<stdio.h> vo

PTA - C程式設計 NoD - 陣列-指標-字串 10道題

6-1 使用函式實現字串部分複製 6-2 刪除字元 6-3 字串的連線 6-4 函式實現字串逆序 6-5 指定位置輸出字串

Coursera 學習記錄:指標練習題關於指標陣列,以及對& *的理解

寫在最開始: ‘&’ 相當於“取地址”,等級高一級 ‘* 相當於“取地址對應的值”,往下降一級 關鍵知識點: 1、陣列名為常量,不可被賦值 2、char型別的陣列名為首元素的指標,並且在

指標和動態分配記憶體 不定長度陣列------新標準c++程式設計

背景:   陣列的長度是定義好的,在整個程式中固定不變。c++不允許定義元素個數不確定的陣列。例如: 1 2 int n; int a[n];  //這種定義是不允許的   但是在實際程式設計中,往往會出現要處理的資料數量在程式設計時無

指標10字元指標做函式引數

這幾天爭取把指標搞完。。。 將字串從一個函式傳遞到另一個函式,可以用字元陣列名作為實參,還可以用字元指標作實參,將字串的首地址傳遞到另一個函式中。 例如 題目 應用字元指標和函式,求一個字串的長度。 p.s.實際上就是strlen()函式 程式碼如下 #includ

解決vuex儲存複雜引數物件陣列重新整理資料丟失問題

我需要在搜尋頁拿到結果之後跳轉到搜尋結果頁並攜帶搜尋結果 嘗試過幾種方法之後最終採用vuex+sessionStorage結合的方法在mutations中 setResultValue(state,flag){ sessionStorage.setItem("re

LoadRunner效能測試指標 TPSTransaction per Second總結

內容為轉載,具體情況還要具體參考,實踐才能出真理 TPS是Transactions Per Second的縮寫,也就是事務數/秒。它是軟體測試結果的測量單位。一個事務是指一個客戶機向伺服器傳送請求然後伺服器做出反 應的過程。客戶機在傳送請求時開始計時, 收到伺服器響應

LoadRunner效能測試指標 TPSTransaction per Second總結

TPS是Transactions Per Second 的縮寫,也就是事務數/秒。它是軟體測試結果的測量單位。一個事務是指一個客戶機向伺服器傳送請求然後伺服器做出反 應的過程。客戶機在傳送請求時開始計時, 收到伺服器響應後結束計時,以此來計算使用的時間和完成的事務數,最終利用這些資訊來估計得分。 T

Android智慧指標分析sp、wp

在Android native編寫程式碼時,會經常接觸到sp、wp,sp並不是smart pointer的意思,而是strong point;wp就是weak pointer。這兩個概念比較像JAVA中的強弱引用,使用sp和wp可以讓程式設計人員不需要再關係記憶體的釋放

Qt原始碼之d指標分析QObject,QObjectPrivate

前言   閱讀過Qt原始碼的同學一定對d指標不陌生,前段時間其實寫過一次關於Qt d指標的文章,但是感覺不夠透徹就刪除了,這次打算徹底地詳細地再分析一次。 Pimpl機制   對Pimpl機制不熟悉的先熟悉下Pimpl機制Pimpl機制。Qt的d指標其實主要還是

智慧指標例項引用計數型

如果在多個類的例項中共享同一塊堆記憶體,指標的操作會相當繁瑣,一不小心就會出現野指標,試想一塊記憶體被其中一個指標釋放了,另外幾個物件的指標仍然指向他的情況,相當可怕!這時候就需要用帶有引用計數的智慧指標管理了! 《C++ Primer》上給出了兩種實現方式: 1.利用友元

c語言指標做函式引數,使用指標地址二級指標在被調函式中修改主調函式的指標

1.程式碼 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char *prive; int data; } T_

資料結構-單鏈表進階之快慢指標原理快速查詢法

面試題:快速找到未知長度單鏈表的中間節點?這個問題的解決方法分為普通方法和高階方法。1.普通方法即我們大家都能一下子想到的,首先遍歷一遍獲取總長度L,然後再次遍歷迴圈至L/2即可;時間複雜度為:O(L+L/2)=O(3/2L)程式碼簡單實現:typedef struct {

指標問題java.lang.NullPointerException

  在Java中對值為null的指標呼叫任何方法,就會引發空指標異常(java.lang.NullPointerException)。空指標異常絕對是Java中最難查詢和除錯的一種異常,你永遠無法得到任何有用的除錯資訊。通過個人日常總結和網上搜集整理,歸納如下,供大家參考。

Jira強制退出時意外停電再啟動報Locked錯誤的幾個解決辦法

mode ogr pro 推薦 dev 重啟 如意 文件的 mod 方案1.先刪掉 jira_home下的.jira-home.lock,再重啟 jira_home指你的Jira安裝目錄,如D:/Program Files/Atlassian/Application

SQL交換一列中數據的值男女性別

have set iat table p s 題目 highlight running 女性 在刷LeetCode的時候遇到的SQL題目 627. Swap Salary Given a table salary, such as the one below, tha

VC++ MFC工程中中如何將一個工程的資源對話框復制到另外一個工程

sta 發現 targe 文件復制 如果 csdn static 備份 完成 問題的提出:在工程1中用到的資源,在工程2中已有現成的。即工程1中要用到的對話框和工程2的完全相同,而工程2中對該對話框的布局已設計好、控件變量都綁定好了。但由於該對話框的控件特別多,

hibernate 一對多自關聯查詢選單表

hibernate 有自帶的選單查詢功能,當查詢的節點有幾千條時,hibernate自帶的選單查詢會造成卡頓的情況,但一般情況下hibernate自帶的選單查詢減少程式設計師的程式碼量, 簡化了程式碼 相關測試資料(MySQL) -- 一對多雙向自關聯 -- 選單表 -- t_hib