1. 程式人生 > >C++結構體指標 常用用法及注意事項

C++結構體指標 常用用法及注意事項

總述:

c++結構體指標,顧名思義就是指向結構體的一個指標,這篇部落格作用是記錄c++結構體指標的常用用法及我經常犯的一個錯誤。

定義結構體:

struct My{
    My *left;
    My *right;
    int val;
    My(){}
    My(int val):left(NULL),right(NULL),val(val){}
};

一般結構體變數的訪問方式:

void test1(){
    My m;
    m.val = 1;
    cout<<m.val<<endl;
}

可見,結構體中的變數,可以直接通過點操作符來訪問。

而對於結構體指標而言:必須通過->符號來訪問指標所指結構體的變數。

void test2(){
    My m;
    m.val = 1;
    My *mm;
    mm = &m;
    cout<<mm->val<<endl;
}

注意事項:

宣告一個結構體指標記得初始化,一定要初始化,不初始化會出事(重要的事情說三遍)

如下:

void test3(){
    My *m;
    m->val = 1;
}

這份程式碼會報一個錯:空指標訪問異常,這是因為m這個指標還沒有初始化,因此他沒有記憶體空間,自然就不存在有val這個引數。正確開啟方式:

void test3(){
    My *m;
    m = new My(3);
    m->val = 4;
    cout<<m->val<<endl;
}

以上程式碼用new申請了記憶體空間。問題即可解決。

相關推薦

C++結構指標 常用用法注意事項

總述: c++結構體指標,顧名思義就是指向結構體的一個指標,這篇部落格作用是記錄c++結構體指標的常用用法及我經常犯的一個錯誤。 定義結構體: struct My{ My *left; My *right; int val; My(){}

C++各種智慧指標用法區別

    在C++程式設計中,智慧指標絕對是很強大的用法,boost庫裡把這些指標用的出神入化,它可以簡化程式設計師寫程式碼的複雜度,不用去考慮程式碼分支路徑導致的遺漏delete語法,也無須擔心冗餘delete導致的double free問題。但是,便利性也要求程式猿熟悉各

C++中vector的用法注意事項

#include<vector>; 一、vector 的初始化:可以有五種方式,舉例說明如下: (1)vector<int> a(10); //定義了10個整型元素的向量(尖括號中為元素型別名,它可以是任何合法的資料型別),但沒有給出初值,其值是不確

C++ 結構指標的定義

struct node { …… } ; struct node *p1, *p2 ; typedef struct node { …… }Node; typedef Node* pN

C語言使用指標表示陣列的注意事項

1)陣列名是指標常量 如對指標變數可以進行++運算,但是對陣列名卻不允許,另外,對陣列名的賦值運算也是錯誤的 2)注意指標變數的當前值 指標變數的值在程式執行過程中可能經常改變,要對此注意 3)陣列越界 C語言系統是不檢查陣列越界的,需要程式設計師自行檢查 4)深入理解++和—與指標變數的結合

內部類的用法注意事項

       1. 什麼是內部類?        內部類就是在一個類的內部定義的類,內部類中不能定義靜態成員(靜態成員不是物件的特性,只是為了找一個容身之處,所以需要放到一個類中而已,這麼一點小事,你還要把它放到類內部的一個類中,過分了啊!提供內部類,不是

處理AIX檔案系統空間不足常用命令注意事項

三個確定:<1>確定所要清理的檔案型別: (1)建議只清理LOG等日誌檔案,對於需清理檔案採用清空或移動的策略,擴充檔案系統則是最後考慮的方法。 (2)對於tar,gz等型別的檔案,需確認檔案用途後再進行移動 (3)系統檔案勿做任何操作<2>確定檔案

MySql指令、用法注意事項

MySql指令 查看錶結構 desc table_name; 修改某一列的資料型別 假設表stu有一列id原本的資料型別是int(11)將其型別改為varchar(20)的語句如下:

C語言 結構結構指標用法總結

在C語言開發中,結構體用到的機會很多。所謂結構體,就是定義一種裡面包含多種元素的變數。 我們來看一個簡單的例子。比如你想定義一個書名列表然後為每本書建立書名和作者作為書的資訊。結構體變數定義如下: struct book { char name[30]; ch

C語言-結構指標結構巢狀

C語言中結構體是一種構造型別,和陣列、基本資料型別一樣,可以定義指向該種類型的指標。結構體指標的定義類似其他基本資料型別的定義,格式如下 struct 結構體名 * 指標名; 比如: struct person{char[20] name; int age;};//先定義一

c++調用python系列(1): 結構作為入參返回結構

pac 格式 lob 打包成 def 程序 png 校驗 upload 最近在打算用python作測試用例以便對遊戲服務器進行功能測試以及壓力測試; 因為服務器是用c++寫的,采用的TCP協議,當前的架構是打算用python構造結構體,傳送給c++層進行socket

C/C++開發】函式使用結構結構指標作為返回值分析

函式使用結構體、結構體指標作為返回值分析 32位機,gcc編譯器 使用結構體作為返回值 分析反彙編程式碼可知,當被呼叫的子函式返回值為結構體的時候,呼叫函式將分配一段空間用於存放返回的結構體(使用一個結構體變數接受返回值),並將這段空間的地址作為呼叫時的引數壓棧。子程式不負責對要返回的結構體分

c語言typedef 與結構指標

轉載部落格:https://blog.csdn.net/developerof/article/details/24885205?utm_source=blogxgwz0  #include<stdio.h> #include<

C程式碼開發遇到的問題 變數初始化和結構指標移動

1. 變數初始化 函式內部的變數如果不初始化的話預設不是0而是一個隨機值。 下面的程式用來列印一個未初始化的無符號的整型值,執行幾遍,每次的結果都會不一樣 #include <stdio.h> void PrintUint() { /* 預設是隨機值,不一定是0 *

結構指標C語言結構指標詳解

結構體指標,可細分為指向結構體變數的指標和指向結構體陣列的指標。 指向結構體變數的指標 前面我們通過“結構體變數名.成員名”的方式引用結構體變數中的成員,除了這種方法之外還可以使用指標。前面講過,&student1 表示結構體變數 student1 的首地址,即 student1 第一個項的地址

C/C++結構用法及其對齊原則

#include <iostream> using namespace std; /* ①結構體變數的首地址(比如結構體陣列就要考慮到結構體本身的地址)能夠被其最寬基本型別成員的大小所整除; ②結構體每個成員相對結構體首地址的偏移量(offset)都是該成員大小的整數倍,如

C# numericUpDown控制元件用法總結注意事項

numericUpDown控制元件在使用的過程當中,有些用法會不太一樣,下面做一總結。 1. 判斷numericUpDown的value屬性是否為空        使用過Numericupdown控制元件的童鞋初期應該都會碰到一個奇怪的問題,在刪除了控制元件裡的值之後,裡

結構指標作函式引數(C# 呼叫C++ 的DLL)

1、C++結構體定義:   #pragma pack(1)  struct Person  {      #define Count_favoriteNumbers 6        int id;        fl

Delphi 呼叫 c編寫的動態連結庫,結構指標作為引數

折騰了一天終於把 結構體指標作為在delphi和c動態連結庫之間函式引數傳遞的問題徹底解決了,花了一天時間的主要原因是沒有領會引數傳遞的精髓。現在把c程式碼和delphi程式碼粘上來,以供後來者學習參考。 delphi程式程式碼: unit Unit3; interfac

C語言經典例題--結構指標變數作為函式引數的傳遞

#include <stdio.h> #include <string.h> struct student { int age; char sex; char name[30]; }; void inputstudent(struct stu