C语言指针复习 双重指针 含注释 (适合初学者)

快到天梯赛的日子了,题库里一堆二叉树的题目,搞的我这个没有学过数据结构的非常难受,加上之前大一学的指针忘了干干净净,才来复习一下指针。

希望大家阅读博客前先去阅读这篇博客,否则一些地方可能会有一些疑问

C++中关于int *p 和 int* p的区别?

下面是代码部分,共有两个例子:
第一个例子是将一个int型数据进行加一操作。
第二个例子是将一个int型指针所指的地址进行加一操作。

#include <stdio.h>

void getUpper(int *p){
    (*p)++;
}

// **pointer的意思是指针的指针的意思
//因为我们需要存p的地址,所以使用pointer来存p的地址了。
void getPointerUpper(int **pointer,int arr[]){
    *pointer =&arr[1];
}

int main(){
//  需要注意的一个地方是“ int *p”的“*p”和一般的“*p”不是一个意思。
//  第一个是声明一个名为p的指针。第二个是对指针p取值,也就是取该指针指向地址的数值。
//  如果有疑问可以访问下面的链接:
//  https://blog.csdn.net/yangyong0717/article/details/73649220

//  Example 1
    printf("下面是指针对单个指针所指的地址的数据的加一示例:\n\n");

//  将a的地址传给函数getUpper,然后函数将在该地址的数据加一。

    int a = 5;
    printf("before:\na = %d\n",a);
    getUpper(&a);
    printf("after:\na = %d\n\n",a);


//  Example 2
    printf("下面是对指针所指地址加一的示例:\n\n");

//  将arr[0]的地址传给指针p,然后我们将p的地址传给函数,然后函数将
//  p内存的地址赋值为&arr[1]
//  这里我们需要搞懂的是地址和指针的概念
//  指针和数据都含有一个地址
//  如果我们需要将p的地址从arr[0],到arr[1],这样我们必须得再给p分配一个
//  指向p的指针pointer,这样我们才能将p的地址加一,得到arr[1]。

    int arr[5] = {2, 1, 3, 5, 4};
    int *p = &arr[0];
    
//  如果有些疑问可以看一下下面注释的输出。
//  printf("&p = %d\n",&p);
//  printf("p  = %d\n",p);
//  printf("arr[0] = %d\n",&arr[0]);

    printf("before:\n*p = %d\n",*p);
    getPointerUpper(&p,arr);
    printf("after:\n*p = %d\n",*p);

//   得出结论:
//   一个函数如果需要不返回值就改变一个局部变量的值。
//   我们可以使用指针获取他的地址进行操作。

}

感谢各位的阅读,如若有写的不好的地方还望斧正!

最后大家如果还是有疑问,请去这个大佬的视频:
C语言指针视频教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值