使用 int *p_val = &val; 進行指針變量的聲明, 也可以使用typedef int * pint_t來進行聲明
/* 指針演示 */ #include <stdio.h> typedef int *pint_t; // int main() { int val = 0; // pint_t p_val; // 使用定義來決定聲明 pint_t p_val; // int *p_val = &val; p_val = &val; // int *p_val1 = NULL; *p_val = 10; printf("您輸入的數是%d\n", val); return 0; }
使用指針地址進行兩個數的位置交換
/* 指針演示 */ #include <stdio.h> int main() { int val = 3, val1 = 7; int *p_val = &val, *p_val1 = &val1; //進行數據的位置交換 *p_val ^= *p_val1; *p_val1 ^= *p_val; *p_val ^= *p_val1; printf("p_val是%d, p_val1是%d\n", *p_val, *p_val1); return 0; }
使用指針地址獲得最小的數字
/* 指針使用,計算最小的數字 */ #include <stdio.h> int main() { int val = 0, val1 = 0, val2 = 0; int *p_val = &val; //構造p_val指向val 構建初始化的指針 printf("請輸入三個數字:"); scanf("%d%d%d", &val, &val1, &val2); if (*p_val > val1) { p_val = &val1; } if (*p_val > val2) { p_val = &val2; } printf("最小的數字是%d\n", *p_val); }
使用int *p_val = arr; 來定義數據, 使用+1來表示下一個數組的地址
/* 地址計算規則 */ #include <stdio.h> int main() { int val = 0; int arr[] = {1, 2, 3, 4, 5}; int *p_val = arr; //用於進行數據地址的存儲 printf("%d\n", *(arr + 2)); for (val = 0;val < 5;val++) { printf("%d ", *(p_val + val)); } printf("\n"); printf("%d", (int)(&arr[3] - p_val)); // printf("\n"); }
數組指針的循環,使用p_val = arr;來表示第一個數組的地址,然后在for里面使用,p_val++,進行自增操作
/* 指針演示 */ #include <stdio.h> int main() { int val = 0; int *p_val = NULL; int arr[] = {1, 2, 3, 4, 5}; for (p_val = arr;p_val <= arr + 4;p_val++) { printf("%d ", *p_val); } printf("\n"); }
使用const對數據進行預先的聲明, const可以限制用戶對數據的內容和地址進行修改
/* const關鍵字 */ #include <stdio.h> int main() { int val = 0; const int *p_val = &val; //不可以對數組的內容進行操作 int * const p_val = &val; //不可以對數組的指針進行操作 // *p_val = 10; //對文件的內容進行賦值 //對地址進行操作 // p_val = NULL; }
void無類型指針,在聲明的時候可以構建無類型指針,在輸出時進行強制類型轉換
/* 無類型指針 */ #include <stdio.h> int main() { char ch = 'e'; int val = 34; float fval = 6.3f; void *p_val = NULL; p_val = &fval; printf("%g\n", *(float *)p_val); return 0; }
返回地址時,因為函數的原因,數據的地址將會被刪除,因此使用static進行靜態變量設置
/* 指針演示 */ #include <stdio.h> int * read(void) { static int val = 0; //地址會被清除 printf("請輸入數據:"); scanf("%d", &val); return &val; } int main() { int *p_val = read(); printf("輸入的數據是%d\n", *p_val); }
使用地址的移動來進行指針的變化傳遞
/* 使用指針將兩個數進行對換 */ #include <stdio.h> void swap_arr(int *p_arr, int size) { int *p_head = p_arr; int *p_tail = p_arr + size - 1; while (p_head < p_tail) { *p_head ^= *p_tail; *p_tail ^= *p_head; *p_head ^= *p_tail; p_head++; p_tail--; } } int main() { int arr[] = {1, 2, 3, 4, 5}; swap_arr(arr, 5); for (int tmp = 0;tmp <= 4;tmp++) { printf("%d ", arr[tmp]); } printf("\n");