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

 

posted @ 2020-03-03 20:09  c语言我的最爱  阅读(1001)  评论(0编辑  收藏  举报