C语言企业级的需要学习的知识
建立正确程序运行内存的布局图(印象图)
内存四区模型图;
函数调用模型图;
数据类型的本质:固定大小内存块的别名
对于数组变量b[10];
b+1,与&b+1结果不一样;
b代表的是数组首元素的地址
&b代表的是整个数组的首地址
保证指针所指向的内存空间可以被修改(常量区的变量不能被修改)
指针做函数参数,形参有多级指针的时候,站在编译器的角度,只需要分配4个字节的内存(32bit平台)
当我们使用内存的时候才关心指针所指向的内存是一维的还是两维的
指针也是一种数据类型,指针的数据类型是指向的内存空间的数据类型
含义:指针步长(p++),根据所指内存空间的数据类型来确定。
野指针产生的原因:
指针变量与它指向的内存空间是两个不同的概念,释放指针所指的内存空间了但是指针变量本身没有重置为NULL;
避免方法:定义指针的时候初始化为Null,释放指针所指的内存空间以后将指针变量重置为Null;
地址0开始的内存空间是操作系统保护的空间,应用程序不能随便的往里面写;
间接赋值的工程意义:
函数调用时,形参传给实参,用实参取地址传给形参,在被调用函数里面用*p(间接赋值)来改变实参,把运算结果传出去。
间接赋值需要满足三个条件:
1)两个变量(通常是一个实参,一个形参);
2)建立关系,实参取地址赋给形参指针;
3)*p 形参间接修改实参的值。
主调函数和被调函数的特点:
a)主调函数可以把堆区,栈区,全局数据内存地址传给被调用函数;
b)被调用函数只能返回堆区,全局数据;
内存分配:指针作为函数参数是有输入和输出的特性。
应用指针必须与函数调用相结合(指针做函数参数)
| 编号 |
指针函数参数 内存分配方式(级别+堆栈) |
主调函数实参 | 被调函数形参 | 备注 | |||||||||
| 01 | 一级指针作输入 |
|
|
|
|
||||||||
| 02 | 一级指针作为输出 | 栈 | 使用 | 结果输出 | 常用 | ||||||||
| 03 | 二级指针作为输入 |
|
|
|
|
||||||||
| 04 | 二级指针作为输出 | 堆 | 使用 | 分配 | 常用,但不建议使用,转化为02 | ||||||||
| 05 | 三级指针作为输出 | 堆 | 使用 | 分配 | 不常用 |
数组变量的变量名是个常量指针,是为了保证在析构内存的时候,保证所有的数组空间都被释放;
指针作为函数参数(输入、输出时),需要考虑参数是否能被写入。
如果不能被写入:则实参改为数组形式
c语言中没有你不知道的,只有你不会调
java语言中国没有你不会调的,只有你不知道的
在C语言中 Const是个伪命题,不是我们想象的那样。
例如 const int a=100;
int *p =&a;
*p = 1;
则此时a的值为1;
const char * p //修饰的是指针所指向的内存空间变量
char* const p //修饰的是指针变量
函数调用时,用n级指针(形参)改变n-1级指针(实参)的值

数组名是数组首元素的地址,它是一个常量;
数组首元素的地址与数组的地址相等,
int a[10];
printf("得到整个数组的地址:%d\n",&a);
printf("得到首元素的地址:%d\n",a);
二维数组参数退化的问题
二维数组可以看作为一维数组
二维数组中的每个元素是一个一维数组
二维数组参数中第一维的参数可以省略
void f(int a[5]) =======>>> void f(int a[]) ======>> void f(int* a);
void f(int a[3][5]) ======>> void f(int a[][5]) =====>> void f(int (*a)[3]);//指向数组的数组指针
数组参数 等效的指针参数
一维数组 char a[30] char*
指针数组 char* a[30] char** a
二维数组 char a[10][30] char (*a)[30]
C语言企业级的需要学习的知识的更多相关文章
- 互联网世界中的C语言——我的golang学习笔记:1(基础语法快速过)
前言 学习任何知识都会有一个学习背景 最近,我们团队乃至我司整个云服务,上go的呼声越来越高!新服务已经开始用go开发,部分现有Java版的服务重构为go也只是时间问题而已,故相关技术积累势在必行!在 ...
- 要成为一个 Java 架构师得学习哪些知识?
作者:zhuqz链接:https://www.zhihu.com/question/29031276/answer/54631312来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- 使用Code First建模自引用关系笔记 asp.net core上使用redis探索(1) asp.net mvc控制器激活全分析 语言入门必学的基础知识你还记得么? 反射
使用Code First建模自引用关系笔记 原文链接 一.Has方法: A.HasRequired(a => a.B); HasOptional:前者包含后者一个实例或者为null HasR ...
- Java并发编程学习前期知识下篇
Java并发编程学习前期知识下篇 通过上一篇<Java并发编程学习前期知识上篇>我们知道了在Java并发中的可见性是什么?volatile的定义以及JMM的定义.我们先来看看几个大厂真实的 ...
- 【机器学习与R语言】1-机器学习简介
目录 1.基本概念 2.选择机器学习算法 3.使用R进行机器学习 1.基本概念 机器学习:发明算法将数据转化为智能行为 数据挖掘 VS 机器学习:前者侧重寻找有价值的信息,后者侧重执行已知的任务.后者 ...
- 欢迎关注我的微信公众账号:Linux技巧(微信号:irefactoring),一起学习Linux知识~~~
最近很少写博客了,一方面是近期工作比较繁忙,第二是把精力都放在GitHub和读源码去了. 申请了一个微信公众账号:Linux技巧 微信ID:irefactoring(意思是爱重构) ========= ...
- C语言结构体的学习,以及gdb的调式
#include <stdio.h> #include <string.h> #define format "%d\n%s\n%f\n%f\n%f\n" t ...
- Matrix学习——基础知识
以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用GDI+的时候再次学习如何使用矩阵来变化图像,看了之后在这里总结说明. 首先大家看看下面这个3 x 3的矩阵,这个矩阵被分割成4部 ...
- 【python学习小知识】求绝对值和numpy和tensor的相互转换
一.python求绝对值的三种方法 1.条件判断 2.内置函数abs() 3.内置模块 math.fabs 1.条件判段,判断大于0还是小于0,小于0则输出相反数即可 # 法1:使用条件判断求绝对值 ...
随机推荐
- Dijkstra算法的C++实现
Dijkstra算法是在图中寻找两顶点最短路径的算法. 下面以下图有向图为例,说明其基本思想. 上图为转化为邻接矩阵存储: 现在我要寻找1点到其他点的最短距离以及路径: a)1点到各点的距 ...
- Python中__get__, __getattr__, __getattribute__的区别及延迟初始化
本节知识点 1.__get__, __getattr__, __getattribute__的区别 2.__getattr__巧妙应用 3.延迟初始化(lazy property) 1.__get__ ...
- H - Partial Tree HDU - 5534 (背包)
题目链接: H - Partial Tree HDU - 5534 题目大意:首先是T组测试样例,然后n个点,然后给你度数分别为(1~n-1)对应的不同的权值,然后问你在这些点形成树的前提下的所能形 ...
- springBoot启动的时候动态选择装载某些bean
最近有这样一个场景,我们使用了elasticjob lite框架,希望某些job在指定服务器不启动.让spring动态的来装载所需要的job及相关bean 这个时候可以使用@Conditional家族 ...
- FastDFS使用
1.在linux系统中安装FastDFS服务image-server.7z 2.导入FastDFS jar包 fastdfs_client_v1.20.jar 3.创建配置文件fastdfs_clie ...
- $a=[1,2,3,4,5]; $b=[a,b,c,d,e]; 转成[[1,a],[2,b],[3,c],[4,d],[5,3]]
$a=[1,2,3,4,5]; $b=[a,b,c,d,e]; 结果 [[1,a],[2,b],[3,c],[4,d],[5,3]] return array_map(function($v1,$v2 ...
- Python 爬虫 当当网图书 scrapy
目标站点需求分析 获取当当网每个图书名字和评论数 涉及的库 scrapy,mysql 获取解析单页源码 保存到数据库中 结果
- VUE项目的目录关系
1.页面中只有一个index.html. 2.一个js文件.在路由中. 3.主要的app.vue. 4.最后就是可以放多个vue文件的~~(一个页面对应一个vue文件,一个vue组件对应一个js中的i ...
- 论文阅读笔记四十六:Feature Selective Anchor-Free Module for Single-Shot Object Detection(CVPR2019)
论文原址:https://arxiv.org/abs/1903.00621 摘要 本文提出了基于无anchor机制的特征选择模块,是一个简单高效的单阶段组件,其可以结合特征金字塔嵌入到单阶段检测器中. ...
- hiveserver2启动成功但无法通过beeline连接
可能是配置的问题. 我将hive.metastore.uris从配置文件中注释掉之后解决了hiveserver2启动成功但无法通过beeline连接的问题. [root@node03 conf]# v ...