银川手机网站建设,看板娘wordpress怎么带声音,网络推广培训机构排名深圳,网站做软件有哪些内容c/c:指针#xff0c;指针定义和使用#xff0c;指针大小4字节#xff0c;野指针#xff0c;空指针*pNULL
2022找工作是学历、能力和运气的超强结合体#xff0c;遇到寒冬#xff0c;大厂不招人#xff0c;此时学会c的话#xff0c; 我所知道的周边的会c的同学#xf…c/c:指针指针定义和使用指针大小4字节野指针空指针*pNULL
2022找工作是学历、能力和运气的超强结合体遇到寒冬大厂不招人此时学会c的话 我所知道的周边的会c的同学可手握10多个offer随心所欲而找啥算法岗的基本gg 提示系列c学习的基础和高阶知识用于公司生产实践中实实在在的公司部署产品要用的因为c速度快 而java和Python速度慢自然往硬件里面部署算法啥的都得用c或者c因此本科学的c很重要后来的Python或者java就没有那么重要了 c/c系列文章 【1】cc语言优缺点visual studio2019如何新建项目写hello world程序 【2】c/c:gcc安装gcc编译hello world文件system函数调用系统命令sleep函数 【3】linux下gcc的编译过程和功能预处理编译汇编链接.c预处理为.i文件.s文件.o文件.exe文件 【4】c/cwindows平台下依赖的动态库c底层是汇编语言程序断点调试反汇编vs快捷键 【5】c/c数据类型常量变量标识符有符号整型无符号unsigned字符类型字符串类型实数类型浮点型科学计数法 【6】c/c2进制、8进制、10进制、16进制和进制之间的转换c语言输出匹配格式% 【7】c/c原码反码补码和常见的数据类型取值范围溢出 【8】c/c类型限定符printf输出格式putcharscanfgetchar 【9】c/c算术运算符赋值运算逻辑运算比较运算三目运算逗号运算数据类型转换 【10】c/c:顺序结构if else分支语句do while循环语句switch case break语句 【11】c/c:for循环语句分号不可省略表达式可以省略猜数字游戏跳转语句continuebreak避免写goto 【12】c/c:一维数组初始化数组循环打印数组计算数组存储空间数组元素个数数组逆序算法 【13】c/c二维数组数组的行数和列数求法sizeof数组初始化不同形式5个学生3门功课求学生总成绩和功课总成绩 【14】c/cvisual studio的代码快捷键VS设置自定义默认代码使用快捷键 【15】c/c:三维数组字符数组和字符串统计字符串中字符出现的频次scanf输入空格正则匹配表达式 【16】c/cgets()fgets()puts()fputs()strlen()字符串拼接函数 【17】c/c函数的作用分类随机数函数定义调用申明exit()函数多文件编程防止头文件重复 文章目录 c/c:指针指针定义和使用指针大小4字节野指针空指针*pNULL[TOC](文章目录) c/c:指针即地址指针的定义和使用int *pa指针的大小野指针未知指向的指针空指针NULL总结
c/c:指针即地址 指针就是地址 内存单元是计算机中内存最小的存储单位放一个字节8bit
咱现在只看字节
指针就是这个字节的地址编址【编号唯一】 指针就是这个字节的地址编址【编号唯一】 指针就是这个字节的地址编址【编号唯一】 #includestdio.h
#includestring.h
#includestdlib.h
#includemath.h
#includetime.h
#includeWindows.hvoid f55(void)
{int a 55;printf(%x\n, a);//a的地址即指针}int main(void)
{f55();system(pause);return 0;
} 一个int占4字节 代表a的地址即指针就是0133F700 读的时候自动读4个字节即我们的数据 指针变量呢 存地址的变量。
指针的定义和使用int *pa
或者int* pa int类型的变量 *p即地址指针 赋为地址a
int p是windows写法 int p是Linux写法 都对的
相当于定义了一个p变量但是它的空间存的是地址而不是其他类型的变量 a定义好了然后p指向这个a的地址的 再让p250这叫解引用啥意思呢 简洁引用地址 p是一个指针地址指向了a变量 让p250就是间接让a250
这很重要的概念不再是说p这个地址内容为250你要理解懂
原来 m10m在等号左边代表10往m里面存东西 n20 nmm在等号的右边代表m取值取内容 现在看 *p250
将p变量的内容取出当地址找到该地址对应的内容空间 看*p是在等号的左边还是在等号的右边 做左值代表存数据到空间中 做右值取出空间中的数据
是不是和常规变量赋值一样的。
只不过往p里面的地址代表的空间中操作数据 #includestdio.h
#includestring.h
#includestdlib.h
#includemath.h
#includetime.h
#includeWindows.hvoid f55(void)
{int a 10;printf(最开始a %d\n, a);int* p a;//存a的地址*p 2000;//左值取这个a空间存入2000printf(%x\n, a);//a的地址即指针printf(后来a %d\n, a);}int main(void)
{f55();system(pause);return 0;
}
最开始a10 p存了a的地址 现在p2000 就是说找到p这个地址所指向的a把2000赋值给a 验证代码 确实p存放的a的地址时不变的 变化的是p间接指向的a
再感受一下代码一步步都是怎么来的
#includestdio.h
#includestring.h
#includestdlib.h
#includemath.h
#includetime.h
#includeWindows.hvoid f55(void)
{int a 10;printf(最开始a %d\n, a);int* p a;//存a的地址printf(%x\n, a);//a的地址即指针printf(p地址指向的内容是%d\n, *p);//a的地址即指针*p 2000;//左值取这个a空间存入2000printf(后来a %d\n, a);printf(p地址指向的内容是%d\n, *p);}int main(void)
{f55();system(pause);return 0;
} 在printf中*p可就是右值了右值是取内容哦
所以指针的玩法就是通过地址去玩变量懂了吧。
指针的大小
void f56(void)
{int a 10;int* p a;//存a的地址printf(int* :%d\n, sizeof(int*));printf(short* :%d\n, sizeof(short*));printf(long* :%d\n, sizeof(long*));printf(char* :%d\n, sizeof(char*));printf(double* :%d\n, sizeof(double*));printf(void* :%d\n, sizeof(void*));} 其实一律都是4字节 为啥呢 因为*p是放地址的 一个地址自然就是4字节
指针的大小与类型无关 与当前使用的系统有关 32位系统 64位系统
懂了吧
32位bit 懂了吧
野指针未知指向的指针
没有一个有效的地址空间的指针
int *p;
*p1000;
你没有指针地址之前就用那就是野指针 随机一个数能当有效地址吗 void f57(void)
{int* p;printf(未赋值的指针%x\n, *p);*p 2000;//printf(%d\n, *p);
} p在编译时它不会让你通过的 因为p是野指针所以不能玩
p变量有一个值了但是这个值不是可访问的内存区域这时候*p也是野指针
int *p 10;
*p2000;
10这个地址操作系统默认不让动的 0–255这块区域是不能随便写的 这也是野指针 所以不让你玩 懂 正常使用就是你要把某个变量的地址赋给p 然后才能正常使用p 当然你也可以直接写个地址但是最好别这么搞 最好是另外申请变量将它的地址给*p 懂了吧
编程一定要杜绝野指针否则系统gg 编程一定要杜绝野指针否则系统gg 编程一定要杜绝野指针否则系统gg
后面的话怎么解决这种投机行为 那就用空指针 空指针NULL 0号地址 不能用哇
咱们判断一下最好 如果p不是NULL再去赋值最合适 void f57(void)
{int* pNULL;//NULLL0
/*int a 10;*p a;printf(赋值的指针%d\n, *p);
*/if (p ! NULL)//判空是最合适的{*p 2000;printf(*p%d\n, *p);}//printf(%d\n, *p);
}这样就是最合适的 总结
提示重要经验
1 2学好c即使经济寒冬手握10个大厂offer绝对不是问题 3笔试求AC可以不考虑空间复杂度但是面试既要考虑时间复杂度最优也要考虑空间复杂度最优。