C语言学习过程化记录-1

        开始想写博客是因为看了B站上鹏哥的视频课程,受到了鹏哥的启发。近期大方向是备考上海市C语言二三级的等级考,所以为了提高复习效率放弃了部分内容的学习...后期有时间会把知识点补完的。

1. 一维数组的表达方式

指针,就是存放地址的变量。一般说指针就是地址。

假设有段代码,设置了int数组a[5],问:打印其中第三个数组元素有多少种写法?

int a[5] = { 1,2,3,4,5 };
	int* p = a;
	//目标:打印第三个数组元素
	printf("%d\n", *(p + 2));
	printf("%d\n", *(a + 2));
	printf("%d\n", a[2]);
	printf("%d\n", 2[a]);
	printf("%d\n", p[2]);
	return 0;

本文就以上列举的五种情况展开介绍。

首先让指针p取到a数组的首元素地址,*p上的*说明其是指针变量,a代表首元素地址(不同于&a)。

前两次打印通过解引用,分别让p、a的地址向后移动2个单位( sizeof(int) ),最后指向第三个元素。

第二、三次打印通过数组。这里要明确的是,2和a是两个操作数,“ [ ] ”是操作符,谁在括号内部都是可以的。就像 a+b = b+a ,顺序交换不影响结果。最后一个 p [ 2 ] 同理。

后三次总的来说就是:一个数组首元素地址,需要移动的地址单位,加以 [ ] 来取地址,最终实现输出。

最终结果如下。

2.  二级指针

--定义

由于指针变量(如*p)也是变量,是变量就会有地址,所以就产生了指向 指针变量地址 的指针,也就是二级指针。二级指针里存放的是某个一级指针的地址。

模仿设置一级指针的思路,可以很快把一个二级指针“套娃”出来。

int a = 10;
	int* p = &a;
	int** pp = &p;
	return 0;

int *p,*说明*p是一个指针,int说明*p是一个指向整型变量的指针。

int* *pp,*说明*pp是一个指针,int*说明*pp是一个指向int型指针变量的指针。


--赋值

给二级指针赋值的思路和给一级指针赋值的思路一样。这里要注意的是,给二级指针赋值时,要写**pp,不是*pp!

**pp,就是先对  pp  解引用(*),找到了存储在内的一级指针p的地址;然后再对  p  解引用(*),找到了存储在内的整型变量a。

int a = 10;
	int* p = &a;
	int** pp = &p;

	**pp = 233;
	printf("**pp=%d\n", **pp);
	printf("*p=%d\n", *p);
	printf("a=%d\n", a);

	*p = 123;
	printf("**pp=%d\n", **pp);
    //注意:给一级指针赋值后,被赋相关地址的二级指针指向的元素也会变化
	printf("*p=%d\n", *p);
	printf("a=%d\n", a);
	return 0;

因为两个指针最终都指向同一个地址,所以输出时都是一样的。

运行结果如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值