C語言-指針地址使用


使用 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");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM