C C++最新玩转指针,手撕c语言——(指针进阶)_指针进阶pta(1),C C++基础教程

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

顾名思义,指针函数即返回指针的函数。其一般定义形式如下:

类型名 *函数名(函数参数表列);

其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。

int s;
void mian(){
	int \*r = sum(10, 9);
	printf("10 + 9 + %d", \*r);
}
int \*sum(int x, int y){
	s = x + y;
	return &s;
}


作为函数参数的指针

#include<stdio.h>
int f(int \*p);
int main(void)
{
	int i=6;
	printf("&i=%p\n",&i);
	f(&i);
	return 0;
 } 
 int f(int \*p)
 {
 	printf(" p=%p\n",p);
 }

输出的结果是一样的

&i=000000000062FE1C
 p=000000000062FE1C

我们利用上一篇文章中的指针基础再来分析一下这一串代码

#include<stdio.h>
int main(void)
{
	int i=6;
	int\*p=&i;
	printf("%p\n",p);
	printf("%p\n",&i);
	printf("%d\n",\*p);
	return 0;
}


这串代码的结果

000000000062FE14
000000000062FE14
6

--------------------------------
Process exited after 0.03068 seconds with return value 0
请按任意键继续. . .

代码中我们定义int*p=&i
p时指针变量,是一个=&i的地址,或者说p是变量i的指针

再来看一个经典的例子
利用函数交换变量a,b的值

#include<stdio.h>
int swap(int\*x,int \*y);
int main()
{
	int a=7,b=8;
	swap(&a,&b);
	printf("a=%d,b=%d",a,b);
	return 0;
}
int swap(int\*x,int \*y)
{
	int t;
	t=\*x;
	\*x=\*y;
	\*y=t;
	return 0;
}

运行结果为

a=8,b=7
--------------------------------
Process exited after 0.0297 seconds with return value 0
请按任意键继续. . .

注:当函数参数为指针时,当我i们调用这个函数时应该给他一个变量的地址;而不是变量本身;具体为什么,参考上述代码

指针函数可以改变变量的值

#include<stdio.h>
int f(int \*p);
int f(int k);
int main()
{
	int a=9;
	printf("%p\n",&a); 
	f(&a);
	f(a);
	return 0;
 } 
 int f(int \*p)
 {
 	printf("p1=%p\n",p);
 	\*p=11;
 	printf("p2=%p\n",p);
 	return 0;
  } 
int f(int k)
{
	printf("k=%d\n",k);
	return 0;
}

可以在你的编译器上运行一下这个程序

000000000062FE1C
p1=000000000062FE1C
p2=000000000062FE1C
k=11

--------------------------------
Process exited after 0.02982 seconds with return value 0
请按任意键继续. . .

有没有很神奇
所以说通过参数为指针的函数可以改变一个变量的值

数组变量是特殊的指针

数组变量本身表达地址(但是数组单元表达的是变量,)
[ ]运算符可以对数组做,也可以对指针做;
例如

#include<stdio.h>
int main()
{
	int a[]={1,2,5,9,63,8,7,3,9,3,8,63,9,5,596,9};
	int\*p=a;
	printf("%d\n",p[3]);
	printf("%d\n",a[3]);
	return 0;
 } 

运行结果p[3]和a[3]的相同;

9
9

--------------------------------
Process exited after 0.03134 seconds with return value 0
请按任意键继续. . .


同样的,*运算符也可以对数组使用

#include<stdio.h>
int main()
{
	int a[]={1000,2,5,9,63,8,7,3,9,3,8,63,9,5,596,9};
	int\*p=a;
	printf("%d\n",p[3]);
	printf("%d\n",\*a);
	return 0;
 } 

运行结果

9
1000

--------------------------------
Process exited after 0.03093 seconds with return value 0
请按任意键继续. . .


数组变量是const的指针,所以不能被赋值

指针与const

指针是const

如果定义指针时int* const p
意思是说指针变量p不可以修改

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

15731451721)]
[外链图片转存中…(img-Cg0jWLRM-1715731451721)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值