Linux高级C-指针

Linux高级C

本系列是基于入门学完的基础上,为了更好的玩机体验,对一些知识点的进一步延伸与扩展。


注意啦:以下是本人介绍哦
📕作者简介:S学长,致力于C/C++、嵌入式。从事嵌入式行业,热爱健身,身体倍棒的一位博主。
📗本文收录于Linux高级C系列,大家有兴趣的可以看一看
📘相关专栏C语言嵌入式开发、C语言入门系列等,日常Bug集期待你的指导。
📙Linux爱上Ubuntu系列正在发展中,喜欢嵌入式的朋友们可以关注一下哦!


1、字符数组和字符指针

字符指针: 保存字符空间地址的指针变量
字符数组: 元素类型为char的数组

#include <stdio.h>
#include <string.h> 
int main(void)
{
	 char * str="Hello";//字符指针初始化,将字符串常量地址保存到指针中
	 char str2[]="Ni hao";//字符数组初始化,将字符串常量拷贝到数组中

	 str="str";
	 //strcpy(str,"str"); //错误原因:它内部存的是地址,无法将字符串常量放入。
	 strcpy(str2,"str2");
	 
	 printf("str=%s,str2=%s\n",str,str2);
	return 0;
}


运行结果:
在这里插入图片描述

2.多级指针

概念:把保存指针变量地址的指针变量称为多级指针变量

结合下面的图理解:
在这里插入图片描述
代码示例:

#include <stdio.h>

int main(void)
{
	 int a=120;
	 int *p1=&a;
	 int **p2=&p1;
	 int ***p3=&p2;
     
	 printf("a地址=%p\n",&a);
	 printf("a=%d  p1=%p\n",*p1,p1);
	 printf("a=%d  p2=%p\n",**p2,*p2);
	 printf("a=%d  p3=%p\n",***p3,**p3);
	return 0;
}

运行结果:
在这里插入图片描述

3.const型指针

1>const int *p; 或者 int const *p;
p为指向整型变量指针,且该变量相对于p而言只读。
2>int *const
p; p为指向整型变量指针,且该指针p本身只读。

4.void 类型指针

可取万物。用时需要强转。

代码示例:

#include <stdio.h>

int main(void)
{
	 int a=100;
	 float b=25.25;
	 char str[]="hello sir!";
     int *p=&a;

	 void *s;
	 
	 s=&a;
	 printf("(int *)=%d\n",*(int *)s);

	 s=&b;
	 printf("(float *)=%4.2f\n",*(float *)s);

	 s=&p;
	 printf("(int**)=%d\n",**(int **)s);

	 s=str;
	 printf("(cahr *)=%s\n",(char *)s);
	return 0;
}


运行结果:

在这里插入图片描述

总结

关注指针指向的区域,在内存中不同的区域,生存期不同,权限也不同。栈区可能被释放,堆区、date区可读写,,rodate、text区只可读。
void指针使用要记得强转。
多级指针操作指针。

如果这份博客对大家有帮助,希望各位给S学长一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给S学长的意见,欢迎评论区留言。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S安东尼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值