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学长的意见,欢迎评论区留言。