应聘C语言知识点复习 二

函数
模块化思想 提高效率
局部变量 全局变量
同名覆盖
函数的嵌套调用
不要在函数中定义函数
形参也是一个局部变量
作用域与内存的生存周期  验证作用域可将变量赋值到其他地方
全局变量作用域在全局,生存周期是全局的
局部变量作用域在局部,生存周期是局部的
静态局部(static)变量作用域在局部,生存周期是全局的
静态局部变量定义以及初始化只第一次有效,之后程序跳过该语句向下执行。
char a[] = "123"一共有4个变量,包括'\0'
puts();打印出一串字符串(另一种方式)int puts(char *s);
puts("hello");也正确 地址为文字常量区中 h 的地址。
变量的定义最好在最前面。
return xx;作用是为了在调试时可看到是具体哪个函数出错。
int func(int a[])=int func(int *a)=int func(int a[n])形参中的a为指针变量(即首地址)并不是数组;


char *p = "123456"; 存储在文字常量区 (只能读不能写) p为存储在文字常量区1的内存的地址
char a[] = "hello" ;
len = strlen("123");这里 123 也是文字常量区 len = 3;
strlen  int strlen(char *s);并不计算'\0'这个字符
strcmp  int strcmp(char *s1, char *s2); 比较的是ASIC码值 相等为0;小于为-1;大于为1;
strcpy  int strcpy(char *dest, char *src);


strcpy("123","hello");error 编译可以通过但是在执行时会出现段错误。
char *p; strcpy(p,"hello");error 编译可以通过但是在执行时会出现段错误。

char a[2]; strcpy(a,"hello");right


风格:一行不要出现两个封号;
int *p; *p = 1;是错误的;
定义函数时,用到指针时应该用int *a,而不是int &a;
一旦定义指针时,不能给指针直接(*)赋值,而要把一个已经定义好的变量赋给它,否则会出现段错误
当未给定函数中形参地址时,返回值是一个随机数
字符串数组中 可以*s++;
int *p;int a[3] = {1,2,3}; *(p++) = 1;
printf("%d,%d\n",*(p++),*(++p));对于不同的编译器的编译顺序不同。可能从左往右,也可能从右往左
++的优先级比* 高 验证:*p++;若*优先级高则a[0]值最后会改变,但是实验验证a[0]没有改变;
typedef char mychar;为已知类型取一个别名;既可以用在main函数中,也可以用在main函数外面
unsigned 无符号
malloc();要加头文件#include <stdlib.h>或者#include <malloc.h> 分配给连续的地址
返回值为void *类型 长度为1个字节的地址 不做解析只存地址
地址一般都是4个字节或者8个字节
int *p =NULL; void *p1 = NULL; p1 = p;不会警告;但是p = p1;会有警告;因为void只存地址,不解析;
在malloc();动态分配内存后 使用该内存时要重新定义指针并且将void *进行强制转换
局部变量在栈区(动态存储区):栈区内存特点:(电脑)当声明时申请内存,当结束是释放内存;
全局变量和static变量在静态存储区。
malloc变量在堆区:堆区特点:我们手动申请,手动释放;
void free(void *p--必须是malloc返回的值(其实也可以是其他类型,只要是malloc返回的那个值即可));


在编程时的严谨和安全性检查:
在malloc()函数之后立刻做安全检查:if(p == NULL);malloc 在内存不够时返回值为NULL;
在free(p)之后要马上 p = NULL;否则之后可能会出现段错误。
当p = NULL 时则 *p执行时会产生段错误;所以在 *p 时要判断if(p == NULL);

长度为零的字符串占一个字节,但是当为NULL时则不占字节;
const:只读变量  

const int a = 0; int *p = (int*) &a; *p =1;则编译可以通过.
const int *p = NULL;数值(*p)不能访问
int const *p = NULL;数值(*p)不能访问
int *const p = NULL;地址(p)不能访问
只有运行程序时才真正使用内存。


结构体的用法
struct student{
  int age;
  char sex;
};
struct student stu1;
stu1.age = 20;
初始化 struct student stu1 = {20,1};但是赋值不能这样操作
在主函数之外写结构体;
声明时struct student 是一起的;
char sex[6] = "seon";但是在赋值时不能这样操作,必须一个一个赋值;可以用strcpy 实现赋值
最好不要定义一个数组,其长度为一个变量
指针变量永远占4个字节
在不想定义数组长度时,可以用malloc来分配内存,但是必须要给一个最大数组长度的临时变量。分配不用后要用free释放。

作用域
生存周期:内存的申请与释放


          全局     static局部 局部变量
作用域    整个程序  整个函数   整个函数
生存周期  整个程序  整个程序   整个函数


动态存储区 :栈区 堆区
静态存储区 :static局部变量 全局变量 文字常量区


证明两个变量是不同的 就打印两个变量的地址
函数的传参本质是给变量赋值
void *p 通常之后不做解析,只记录地址
数据的丢失
typedef 
不要返回一个局部变量的地址


结构体定义后要加封号。
结构体中给字符串赋值用strcpy()




初始化={.age = 1,.name="zxh"};可以交换顺序


执行完 return 之后,不执行之后的语句,直接跳出;


void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。
字节对齐

char *p strcpy(p,"hello");会出现段错误因为p是随机的
char *p="hello world"想要改变每一个字符只能使用malloc
操作系统管理内存分配
操作系统给每个程序分配一定的内存


const char* s;
char const* s;
char *const s;
const 在*前面 内容不能改变 地址可以改变
const 在*后面 地址不能改变 内容可以改变


内存泄漏


操作系统给程序分配一个段式的空间,程序只能使用这段空间的地址。
strcpy不是对拷,到'\0'结束
typedef 后有封号;
用补码,减法可以用加法实现
异或作用:与1异或反转特定位 与0异或保留原值
左移比乘法运算速度高
以一个有限长度的二进位作为数的模。
以补码形式存放一个数的范围是-128~127
位运算只能是整型或字符型的数据,不能是实型数据。
~的优先级比算术关系逻辑运算符和其他的位运算符都要高。
左移移位相当与该数乘以2(只适用于该数左移时被舍弃的高位中不包含1的情况)。
>>:左补零(逻辑移位):左补一算术移位


结构体整体拷贝,是内存拷贝。
malloc执行时才分配内存。
类型检查
枚举类型 不能直接赋整型,(编译器有差别)
一、先定义结构体类型再定义变量名
二、在定义类型的同时定义变量
三、直接定义结构体类型变量


字节对齐的细节和编译器实现相关,但一般而言,满足三个准则:
  1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 
2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding); 
3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。 



1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资源 5来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资 5源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值