指標:存放記憶體地址的變數

学嵌入式的阿伟發表於2024-08-16

//指標:型別跟存放變數的型別一致

定義格式:資料型別 * 變數名;

static關鍵字可以防止記憶體被釋放

禁止使用野指標和懸空指標

特殊指標:void* p;空型別指標,可以存放任何型別指標,但是不能進行操作

//指標高階應用:以位元組為單位,交換兩個變數的值

#include <stdio.h>

void Swap(void* p1,void* p2,int len);

int main(){

//指標高階應用,交換兩個數值:按位元組交換兩個變數值,可適用各種資料型別資料交換,使函式具有通用性

long long a = 2147483647;

long long b = 21474836;

void* p1 = &a;

void* p2 = &b;

printf("交換前:a = %d,b = %d\n",a,b);

Swap(p1,p2,sizeof(a));

printf("交換後:a = %d,b = %d",a,b);

}

void Swap(void* p1,void* p2,int len){

char* pc1 = p1;//用char指標按位元組交換兩個變數數值

char* pc2 = p2;//char指標是1個位元組

int i;

for(i = 0;i < len;i++){

char temp = *pc1;

*pc1 = *pc2;

*pc2 = temp;

pc1++;

pc2++;

}

}

二級指標,多級指標:

二級指標:指向指標的指標,多級指標同理,型別跟指向空間中存放資料型別相同

//陣列和指標:

陣列指標:指向陣列的指標,使用陣列名和陣列首地址的步長不同,前者是資料型別位元組數,後者是資料型別 * len

//二維陣列:資料型別 陣列名[行數][列數];矩陣

陣列指標,指標陣列

陣列指標:指向陣列的指標

指標陣列:存放指標的陣列

兩者步長不同

//函式指標:指向函式的指標,嵌入式介面用函式指標呼叫

//定義格式:資料型別 (*指標變數名)(形參1資料型別,形參2資料型別) = 函式名;

//函式指標,函式指標陣列練習:透過函式指標陣列呼叫函式

#include <stdio.h>

int Sum(int num1,int num2);

int Abstruct(int num1,int num2);

int Multiply(int num1,int num2);

int Divide(int num1,int num2);

int main(){

int num1,num2;

printf("請輸入兩個要運算的數值:");

scanf("%d%d",&num1,&num2);

int (*arr[4])(int,int) = {Sum,Abstruct,Multiply,Divide};

int choose;

printf("請輸入運算編號(1~4):");

scanf("%d",&choose);

int res = (arr[choose-1])(num1,num2);

printf("%d",res);

}

int Sum(int num1,int num2){

return num1 + num2;

}

int Abstruct(int num1,int num2){

return num1 - num2;

}

int Multiply(int num1,int num2){

return num1 * num2;

}

int Divide(int num1,int num2){

return num1 / num2;

}

相關文章