C语言
you can*fighting
这个作者很懒,什么都没留下…
展开
-
c语言
//求十个数中的最大值#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){int a[10];int max,i;printf("请输入十个数;\n");for(i=0;i<=9;i++) {{ scanf("%d",&a[i]); max=a[0];}for(i=0;i<=9;i+...原创 2017-10-08 15:28:58 · 158 阅读 · 0 评论 -
关于数组名在sizeof内部和在strlen内部
//一维数组int a[]={1,2,3,4};printf("%d\n",sizeof(a));//16,数组名单独放在sizeof内部,表示整个数组,而sizeof求的是字节,所以输出16printf("%d\n",sizeof(a+0));//4,数组名并不是单独放在sizeof内部,则a+0表示下标为0的地址,为数组a首元素的地址,地址大小为4个字节,所以输出4printf("%d\n"...原创 2017-11-02 20:20:09 · 208 阅读 · 0 评论 -
c语言操作符和表达式
一. 操作符分类:算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员二.算术操作符+ - * / %1.除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。2.对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。3.%操作符的两个操作数必须为整数。返回的是整除之后的余数。三.移位操作符移位操作...原创 2017-11-03 12:15:04 · 187 阅读 · 0 评论 -
函数的调用及栈帧的创建和销毁
实例代码为:环境为vc++6.0为了研究函数过程调用,我们先来了解几个寄存器,esp:堆栈指针寄存器,指向栈顶。ebp:基址寄存器,指向栈底。eip/ip/pc:程序计数器。程序计数器保存的内容永远是当前正在执行指令的下一条指令的地址。call:在调用函数的时候用。 1.通过修改eip来实现函数的跳转(jmp跳转)。 2.将当前正在执行指令的下一条指令的地址保存起来,以便返回。ret:将当前的...原创 2017-11-06 13:31:06 · 235 阅读 · 0 评论 -
可变参数列表
可变参数列表可以让函数在不同的时候接受不同数目的参数,可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件,它是标准库的一部分。这个头文件声明了类型va_list和三个宏——va_start,va_arg和va_end,接下来我们通过一个求平均值的函数来观察这三个宏。例子一:#include<stdio.h>#include<Windows.h>#include...原创 2017-11-11 20:33:28 · 114 阅读 · 0 评论 -
指针和数组
首先我们先来了解一下指针和数组的基本概念。1.指针是一个地址,int *p=&a,p为指针变量,里面存放了a的地址,因此,将地址形象化的称为指针。2.数组是指一组类型相同元素的集合。3.指针数组: 一个存放指针的数组,其元素均为指针类型数据,也就是说数组中的每个元素都存放地址,相当于一个指针变量。 定义一个指针数组 int *a[5],分析如下:由于[]的优先级比*的高,所以p首先跟[...原创 2017-11-20 22:14:24 · 159 阅读 · 0 评论 -
自定义类型(结构体,枚举,联合,位段)
一.结构体c语言提供了两种聚合数据类型,分别为数组和指针,数组是相同类型元素的集合,它的每个元素是通过下标引用或指针间接访问的。结构是不同数据类型的集合,对于结构的访问不能通过下标去访问,因为一个结构的成员可能长度不同。结构并不是它自身成员的数组,结构变量属于标量类型。举例:一个简单的结构声明struct tag{ char a; int b; double c; }x;声明一个变量x,tag...原创 2017-11-27 21:53:56 · 156 阅读 · 0 评论