//指標:型別跟存放變數的型別一致
定義格式:資料型別 * 變數名;
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;
}