指針數組和結構體指針


1.指針數組
1)關於指針數組
一個數組,里面存儲的是指針(也就是帶*的類型)
指針數組:            
            
char* arr[5] = {0};     //用0填充數組           
            
arr[0] = (char*)1;            
arr[1] = (char*)2;            
arr[2] = (char*)3;            
arr[3] = (char*)4;            
arr[4] = (char*)5;            
            
char a1 = 'A';            
char a2 = 'B';            
char a3 = 'C';            
char a4 = 'D';            
char a5 = 'E';            
            
char* p1 = &a1;            
char* p2 = &a2;            
char* p3 = &a3;            
char* p4 = &a4;            
char* p5 = &a5;            
            
char* arr[5] = {p1,p2,p3,p4,p5};
指針數組在內存中存儲的方式:
2)指針數組的用法
1】字符串放在常量區,常量區的字符串地址存入指針數組
char* p1 = "if";            
char* p2 = "for";            
char* p3 = "while";            
char* p4 = "switch";            
            
char* keyword[] = {p1,p2,p3,p4};
2】和上一種方式的效果一樣,實際上指針數組存放的是常量區字符串的地址;
char* keyword[] =     
{    
    "if",
    "for",
    "while",
    "switch"
};
 
2.結構體指針
一個結構類型帶一個*;
1)特征
和基礎數據類型的指針特性一樣:
    可以++、--;
    +整數、-整數,並且結果為加減整數乘結構體寬度;
    兩個相同的結構體指針可以相減,結果為int型(相減結果/結構體寬度);
    相同的結構體指針可以比較大小;
ps:也可以將普通指針強轉成結構體指針;但是訪問數據時是按結構體的方式來讀,讀取的數據可能不正確或者無法訪問;
 
2)用結構體指針操作結構體
sturct Student{
    int a;
    int b;
    int c;
};
 
//創建結構體
Student s;
s.a = 10;
s.b = 20;
s.c = 30;
 
//聲明結構體指針
Student* ps;
 
//為結構體指針賦值
ps = &s;
 
//通過指針讀取數據
printf("%d\n",ps->a);    //用“->”符號訪問結構體內容;
 
//通過指針修改數據
ps->a = 100;
printf("%d\n",ps->a);
 
3.實例
代碼:
#include "stdafx.h"
 
typedef struct Player{
    int id;
    int level;
} st;
 
//從中找id=1,level=8的結構體數據
char arr[100]={
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x09,                    
0x00,0x20,0x10,0x03,0x03,0x0C,0x00,0x00,0x44,0x00,                    
0x00,0x33,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,                    
0x00,0x00,0x00,0x02,0x64,0x00,0x00,0x00,0xAA,0x00,                    
0x00,0x00,0x64, 0x01,0x00,0x00,0x00,0x08,0x00,0x00,                    
0x00,0x00,0x02,0x00,0x74,0x0F,0x41,0x00,0x00,0x00,                    
0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0A,0x00,                    
0x00,0x02,0x57,0x4F,0x57,0x00,0x06,0x08,0x00,0x00,                    
0x00,0x00,0x00,0x64,0x00,0x0F,0x00,0x00,0x0D,0x00,                    
0x00,0x00,0x23,0x00,0x00,0x64,0x00,0x00,0x64,0x00                    
};
 
void fun(){
    for(int i=0;i<=100-8;i++){
        st* s = (st*)(arr+i);    //將char*強轉為結構體指針
        if(s->id==1 && s->level==8){
            printf("%d ->%x",i,arr+i);    
        }
    }
}
 
int main(int argc, char* argv[])
{    
    fun();
    getchar();
    return 0;
}
結果:
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM