C语言指针

int* ptr;    // 声明一个整型指针变量ptr
char* cptr;  // 声明一个字符型指针变量cptr

int num = 10;
int* ptr = #  // 将ptr指向num的地址

int num = 10;
int* ptr = #
int value = *ptr;  // 解引用ptr,获取指针所指向地址处的值

int* ptr = (int*)malloc(sizeof(int));  // 在堆上分配一个整型变量大小的内存空间
*ptr = 20;  // 将值20存储到ptr所指向的内存地址处
free(ptr);  // 释放动态分配的内存空间

int arr[5] = {1, 2, 3, 4, 5};
int* ptr = arr;  // 将指针ptr指向数组的第一个元素
int value = *(ptr + 2);  // 通过指针进行偏移,访问数组中的第三个元素


void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}
int num1 = 10;
int num2 = 20;
swap(&num1, &num2);


//指针数组 数组里存放指针。
int num1 = 10;
int num2 = 20;
int num3 = 30;

int* ptrArr[3];  // 声明一个指针数组,包含3个指针元素

ptrArr[0] = &num1;  // 将第一个指针指向num1的地址
ptrArr[1] = &num2;  // 将第二个指针指向num2的地址
ptrArr[2] = &num3;  // 将第三个指针指向num3的地址

// 通过指针数组访问对应的值
printf("%d\n", *ptrArr[0]);  // 输出:10
printf("%d\n", *ptrArr[1]);  // 输出:20
printf("%d\n", *ptrArr[2]);  // 输出:30



//数组指针,指向数组的指针。
int arr[5] = {1, 2, 3, 4, 5};
int (*ptr)[5];  // 声明一个指向包含5个整型元素的数组的指针

ptr = &arr;  // 将指针指向数组arr的首地址

// 通过数组指针遍历数组并访问对应的值
for (int i = 0; i < 5; i++) {
    printf("%d\n", (*ptr)[i]);  // 输出:1 2 3 4 5
}



//多级指针:
#include <stdio.h>

int main() {
    int num = 10;
    int* ptr = &num;
    int** ptr2 = &ptr;  // 声明一个指向指针的指针

    printf("Value of num: %d\n", num);
    printf("Value of *ptr: %d\n", *ptr);
    printf("Value of **ptr2: %d\n", **ptr2);

    return 0;
}


//二维数组的指针
#include <stdio.h>

int main() {
    int arr[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };

    int (*ptr)[4];  // 声明一个指向包含4个整型元素的一维数组的指针

    ptr = arr;  // 将指针指向二维数组的首行(第一个一维数组)

    // 使用指针遍历二维数组并访问对应的值
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%d ", *(*(ptr + i) + j));  // 输出二维数组的值
        }
        printf("\n");
    }

    return 0;
}

数组指针和指针数组分不清楚的可以这样记,重要的信息放在前面,数组指针,数组里还是数。指针数组,数组里放的是指针。

多级指针:

**head head是地址,*head是head地址对应的数据。如果*head对应的数据还是一个地址那么再*(*head)就是*head地址对应的数据,地址可以看作是寻找数据的索引。如果head地址对应的数据不是地址,那么*head会获取head地址对应的数据,如果此时再*(*head)相当于*(任意数),*head不是地址会报错。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值