1. 程式人生 > >資料結構實用C語言基礎

資料結構實用C語言基礎

關於函式引數:

  C語言中有兩種向函式傳遞引數的方式:

    1)值傳遞(相當於弄了引數的一個副本)

    2)引用傳遞(相當於使用的是引數本身)

  例:

#include <stdlib.h>
#include <cstdio>
int *p3,*p4;

void fun(int* p1,int* &p2) {
    printf("%d %d %d %d\n",*p1,*p2,*p3,*p4);
    *p1 = 25;
    printf("%d %d %d %d\n",*p1,*p2,*p3,*p4);
    p1 = p3;
    printf("%d %d %d %d\n",*p1,*p2,*p3,*p4);
    *p2 = 100;
    printf("%d %d %d %d\n",*p1,*p2,*p3,*p4);
    p2 = p4;
    printf("%d %d %d %d\n",*p1,*p2,*p3,*p4);
}    

int main() {
	p3 = (int*)malloc(sizeof(int));
	p4 = (int*)malloc(sizeof(int));
	*p3 = 10;
	*p4 = 20;
    int *p1,*p2;
    p1 = (int*)malloc(sizeof(int));
    p2 = (int*)malloc(sizeof(int));
    *p1 = 5,*p2 = 15;
    fun(p1,p2);
    printf("%d %d %d %d\n",*p1,*p2,*p3,*p4);
}

  結果:

5 15 10 20
25 15 10 20
10 15 10 20
10 100 10 20
10 20 10 20
25 20 10 20

  

typedef的幾種基礎用法:

  1. 為現有型別起個別名

    typedef int dataType;

  2. 給複合型別起個別名

    1) 給陣列起別名

      typedef int intList[100];

      那麼

        intList a,b;

      相當於

        int a[100],b[100];

    2) 給指標起別名

      typedef int* intPointer;

      那麼

        intPointer pa;

      相當於

        int* pa;

  3. 有關結構體的typedef

    typedef struct Node {

      int a,b;

    }strNode,*ptrNode;

    相當於給Node起了個別名,叫strNode,並且給指向Node的指標型別起了名叫ptrNode

    這樣寫之後,以下兩句話就分別等價於:

      1)strNode A;//Node A;

      2)prtNode pA,pB;//Node *pA,*pB;

 

malloc函式簡介:

  malloc的全稱是memory allocation,中文叫動態記憶體分配。

  malloc(unsigned int num_bytes)

  以上的malloc函式向系統申請分配num_bytes個位元組的空間,如果分配成功,則返回一個指向被分配記憶體地址的第一個位置的指標,否則返回NULL。

  由於malloc返回的指標型別為void*,所以在使用這個函式時,我們時常要對分配好的空間進行型別強制轉換,轉成我們需要的型別。

  例:

int* p;//建立一個指向int型別的指標
p = (int*)malloc(sizeof(int) * 100);//給p分配連續 100*4 byte的記憶體空間