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:使用条件判断求绝对值 ...
随机推荐
- js实现可输入的下拉框
<HTML> <HEAD> <META http-equiv='Content-Type' content='text/html; charset=gb2312'> ...
- Educational Codeforces Round 55 (Rated for Div. 2)
D. Maximum Diameter Graph 题意 给出每个点的最大度,构造直径尽可能长的树 思路 让度数大于$1$的点构成链,考虑是否能在链的两端加度为$1$的点 代码 #include &l ...
- 【先验知识归纳】Flask快速入门
本文参考:快速入门 - Flask 0.10.1 文档 路由 Flask使用route修饰器来关联URL与程序函数: @app.route('/') def hello_world(): return ...
- Bootstrap3 模态框 select2搜索框无法输入
<div class="modal fade" role="dialog" aria-hidden="true" data-backd ...
- C语言malloc函数为一维,二维,三维数组分配空间
c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...
- 逆元知识普及(进阶篇) ——from Judge
关于一些逆元知识的拓展 刚艹完一道 提高- 的黄题(曹冲养猪) ,于是又来混一波讲解了 ——承接上文扫盲篇 四.Lucas定理(求大组合数取模) 题外话 这里Lucas定理的证明需要用到很多关 ...
- tengine2.2.3报错502的The proxy server received an invalid response from an upstream server问题处理
tengine2.2.3报错502的The proxy server received an invalid response from an upstream server问题处理 现象:访问订单的 ...
- lua 调用参数报错(a userdata value)
本来想用这种方式统一安全删除node,后来发现参数变成(a userdata value),所以不能用下面这个方式做 方法如下: function RemoveNodeSafe(node) if no ...
- css好看的银行卡号样式
.cardNo { font-size: 17px; font-family: menlo,tahoma; text-shadow: 1px 1px 2px #666; line-height: 18 ...
- 论http弥补技术ajax、comet、SPADY、websocket
为什么要弥补http?http有什么缺陷? 查询资料中