2019-08-03 Day7 c語言 指針 結(jié)構(gòu)體 從入門到放棄

技術(shù):

指針

有關(guān)知識:

c++ 指針 多繼承
java 單繼承 java運行在JVM(java虛擬機)
c指針:為什么要指針
地址 內(nèi)存空間
解決跨區(qū)域(不同作用域 不同代碼塊)之間的數(shù)據(jù)交互
野指針
“ ”
1.聲明/定義變量的時候 表示一個指針變量
float b =20;
int c =10;
int *al 定義一個指針變量指向的內(nèi)存空間只能存放整數(shù)
注意:定義一個指針變量的時候一定要給初值
ing *a =b;不行 指針變量只能存地址 不能存具體值
ing *a =b;不行 整型指針稚嫩存整形數(shù)據(jù)的地址

int *a =&c;正確
float *d = NULL;NULL指向內(nèi)存的起始地址 0x00

2.除了定義指針碧昂量之外 都是訪問某個地址的值
int *temp = =&c 定義指針變量1
*temp =21;訪問tmep地址里面的數(shù)據(jù) 賦值為21

指針變量本身在內(nèi)存空間內(nèi)占據(jù)8個字節(jié)
3.數(shù)組和指針的關(guān)系
數(shù)組名并不是一個變量 沒有分配內(nèi)存空間 int a= 20
指針變量是由內(nèi)存空間

定義一個數(shù)組 系統(tǒng)會分配內(nèi)存空間 可以存值
定義一個指針變量 職位變量本身分配8個字節(jié)內(nèi)存空間 無法存值 因為沒有為它分配可以存值的內(nèi)存空間

若想給指針指向的區(qū)域賦值
1.指針變量已經(jīng)指向某塊區(qū)域
int a =10;
int *pA =&a; 指向變量a的內(nèi)存
*pA = 30;
2.指針指向一個數(shù)組
int num2[10]= {};
int *pNum = num2 ; 指向數(shù)組num2的內(nèi)存
*(pNum+0) =20; 等價于 pNum[0] =20;
*(pNum+1) =30; 等價于 pNum[1] =30;
3.動態(tài)分配內(nèi)存 malloc realloc free
上面兩種指向的內(nèi)存都是別人的
希望分配一個屬于自己的內(nèi)存空間
自己分配的內(nèi)存空間必須自己釋放
普通變量的內(nèi)存是系統(tǒng)自己分配 屬于系統(tǒng)自己負責釋放
malloc 需添加 stdlib.h 頭文件

malloc(10*sizeof(char)); 創(chuàng)建十個字節(jié)的內(nèi)存

char *pName = malloc(10 * sizeof(char));

判斷分配是否成功
if(pName == NULL){
//分配失敗
return;
或者 exit(EXIT_FAILURE);
}

pName[0] = ‘j’;
pName[1] = ‘a(chǎn)’;
pName[2] = ‘c’;
printf(“%s\n”,pName);

當之前分配的內(nèi)存空間不合適 需要在之前的基礎(chǔ)上重新分配
realloc 必須是之前使用malloc分配過的
如果是系統(tǒng)分配的內(nèi)存 是不能使用realloc的
pName = realloc(pName,4 * sizeof(char));
用完要自己釋放內(nèi)存
free(pName);

結(jié)構(gòu)體

是一種數(shù)據(jù)類型 復合數(shù)據(jù)類型 struct

聲明一種類型 struct Person

struct Person{
char name[10];
int age;
char *addr;
}

定義結(jié)構(gòu)體struct Person變量

int i;
struct Person xw;
xw.name=”小王”//數(shù)組一旦定義 地址態(tài)改變
//不能直接給數(shù)組賦值
xw.name[0]= ‘x’;//系統(tǒng)為這個變量分配內(nèi)存了
xw.name[1]=’w’;
xw.addr =’西南大學’;//敞亮字符串的地址是由系統(tǒng)分配的

xw.addr = malloc (1*sizeof(char));
xw.addr[0]= ‘s’ //字符指針賦值 必須要有內(nèi)存
xw.age

結(jié)構(gòu)體所占的字節(jié)是4的倍數(shù) 小的按順序朝大的靠齊

定義一個學生結(jié)構(gòu)體
學號 姓名 年齡 數(shù)學成績
從終端輸入學生的信息
查詢
更改
刪除
增加

使用文件 數(shù)據(jù)持久化
將結(jié)構(gòu)體寫入文件
從文件里面讀取結(jié)構(gòu)體

文件

打開文件

r只讀 文件不存在就報錯 從頭開始讀
w只寫 文件不存在就創(chuàng)建 從頭開始寫
a只寫 從末尾開始寫
r+ w+ a+ 可讀可寫
FILE *fp=fopen(“abc.txt”,”w”);

寫入數(shù)據(jù)

fpurs(“abc”,fp);
將結(jié)構(gòu)體寫到文件里面去
fwrite(&xw1,sizeof(struct Student),1,fp);

讀取數(shù)據(jù)

fgets(temp,9,fp);

讀取文件中的結(jié)構(gòu)體

fread(&xw1,sizeof(struct Student),1,fp);
printf("name:%s\n",xw1.name);
printf("age:%d\n",xw1.age);

關(guān)閉文件

fclose(fp);

技術(shù)的實際使用

指針:

#include "stdafx.h"
#include "stdlib.h"
int _tmain(int argc, _TCHAR* argv[])
{
    int a = 30;
    int *p = &a;
    char *pName =malloc(10*sizeof(char*));
    if(pName == NULL){
        return;
    }
    pName[0] = 'M';
    pName[1] = 'i';
    pName[2] = 'k';
    pName[3] = 'e';
    printf("%s\n",pName);
    free(pName);
    return 0;
}


結(jié)構(gòu)體:

#include "stdafx.h"
#include "stdlib.h"
struct Person{
char name[10];
int age;
char *addr;
}
int _tmain(int argc, _TCHAR* argv[])
{
    int i;
    struct Person Mike;
    Mike.name[0]='M';
    Mike.name[1]='i';
    Mike.name[2]='k';
    Mike.name[3]='e';
    Mike.age=20;
    Mike.addr = malloc (1*sizeof(char));
    Mike.addr[0] = 's';

    return 0;
}

文件:

#include "stdafx.h"
#include "iostream"

struct Student{
    char name[10];
    int age;
};
int _tmain(int argc, _TCHAR* argv[])
{ 
    char temp[20]; 
    struct Student xw1={"xiaowang",20};
    FILE  *fp=fopen("C:/Users/HP/Desktop/abc.txt","a+");
    /*fputs("aaaaaaaaa",fp);
    fgets(temp,9,fp);
    printf("%s\n",temp);*/
    fwrite(&xw1,sizeof(struct Student),1,fp);
    fread(&xw1,sizeof(struct Student),1,fp);
    printf("name:%s\n",xw1.name);
    printf("age:%d\n",xw1.age);
    fclose(fp);
    system("pause");
    return 0;
}


隨筆:

前幾天的學習和之前關(guān)于c語言的學習一直給我一種感覺,其實c語言挺簡單的,事實證明這個是個錯覺。c語言從入門到放棄需要多久?大概是幾個小時(誤?),其實也不是放棄,只是更加的看清自己,知道自己有幾斤幾兩。簡單的小程序?qū)懼鴽]問題,不代表可以寫工程比較龐大的程序。努力學習 up!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容