?头文件的书写
头文件实现函数声明,在使用模板后可以实现一个C文件中即使重复包含某个头文件,在系统中用于只会确认为一个包含
头文件包含可以理解为将头文件内容替换#include“...”行
模板(dong.h):
#ifndef _DONG_H_
#define _DONG_H_
//其它内容
#endif
?编译工具的使用
C语言(gcc)、C++语言(g++)
编译默认输出a.out文件
gcc *
gcc *.c
重命名输出文件
gcc test.c -o newexe
命令行传递参数

#include<stdio.h>
int main(int vsize,char *vch[])
{
int i=1;
for(i=1;i<vsize;i++)
printf("%d=>%sn",i,vch[i]);
return 0;
}
输入和输出
scanf()输入
返回值1为失败,2为正确
int a,b;
printf(请输入两个整数,用空格隔开:);
scanf("%d,%d",&a,&b);逗号分隔
scanf("%d-%d",1)">减号分隔
int i=scanf(%d%d",&b);
printf(%d,%d,%d请输入两个整数,用逗号分隔:);
scanf(printf("dongxiaodong %d n",100);//格式化输出
printf("东小东n");//直接输出内容
相关输出百分号意义:
%d? ? ? ? ? 正常输出整数,仅占有本身大小位置
%5d? ? ? ? 整数位数不足5(起始为1),前面自动补空,超出则与%d相同
%-5d? ? ? ?整数位数不足5,后面补空,超出则与%d相同
%f,%F? 浮点型(float)输出,默认6位小数位,超出则四舍五入
%lf? ? ? ? ? 双精度浮点型(double)
%15f? ? ? ?浮点数总长最小为15,不足则前面补空
%-15f? ? ? 浮点数总长最小为15,不足则后面补空
%3.2f? ? ? 前面数组3与上两个解释一样,小数点后的2表示小数位最大为2位,多则四舍五入,少则补零
%c? ? ? ? ? 单个字符
%s? ? ? ? ? 字符串
%p? ? ? ? ? 指针地址(十六进制)
%x,%X? ??输出不带前缀的十六进制整数,小写x对应小写a、b、c……
%%? ? ? ? ?输出符号:%
输入输出单个字符
getchar();接收第一个字符,等待用户按下enter键后开始读取
getche();接收第一个字符,用户输入后马上读取,输入显示,头文件【#include<conio.h>】
getch();接收第一个字符,用户输入后马上读取,输入不显示,头文件【#include<conio.h>】
putchar();输出一个字符
#include<stdio.h>
void main() {
char ch = getchar();拿到输入的第一个字符
printf(%cn输出之前输入的字符
putchar('n');输出换行符
}
getc()和putc()
原型:
int putc(int char,FILE *stream)
int getc(FILE *stream)
省略步骤:FILE *pfin = stdin;
#include<stdio.h>
main(){
char str[100];
fgets(str,100,stdin);stdin标准输入,键盘
fputs(str,stdout);stdout标准输出,屏幕
}
输入输出字符串
Gets()与puts()是不安全的操作,取代方法为fgets()与fputs()
#include<stdio.h>
char str[];
fgets(str,1)">stdin标准输入,键盘
fputs(str,1)">stdout标准输出,屏幕
}
C语言的注释
#include <stdio.h>
#define DevFlg 20 void main(){ #if(DevFlg==1) printf("----1--------"); #elif(DevFlg==2) printf("----2--------"); #elif(DevFlg==3) printf("----3--------"); #else printf("-------------"); #endif }
调用命令行
输出默认直接到屏幕,需要获取内容可以将其重定向到文件中,然后再取文件(> 、>>)
system(cp -rp dongdir dongdir111");
?
‘1’、1、0x01的不同:
‘1’为字符,其对应的十进制为49,对应的十六进制为0x31
?1为整型,对应的十进制为1,对应的十六进制为0x01
十进制是逢十进一,十六进制是逢十六进一,如下表,可见0~9中,十进制和十六进制数是完全相同的,可直接用“==”。
|
int
0x
0
0(0x00)
1
1 (0x01)
2
2(0x02)
......
......
8
8(0x08)
9
9(0x09)
10
A(0x0A)
11
B(0x0B)
15
F(0x0F)
?
字符(ASCII)与进制之间的转换
字符到进制
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char aa = (int)b';将ASCII转换为整数
char bufx[120];
itoa(aa,bufx,1)">16);进制转换,2 8 10 16
int lend = strlen(bufx);
bufx[lend] = 0;截断数组
输出:2----62
printf(%d----%sn输出进制转换后的值
}
十六进制到字符串
#include<stdio.h>
#include<stdlib.h>
char chx[] = { 0x82,0x07,1)">0x00,1)">0x01,1)">0x02,1)">0x6e,1)">0x62,1)">0x00};
char j = ;
const int lenx = sizeof(chx);
char strxto[lenx];
for (j = 0; j <lenx; j++)
{
printf(%c)chx[j];
}
printf(len:%d--data:%s--rn6);
}
条件/循环语句:
switch…case…break
条件可以是数字(如十进制、十六进制等),可以是字符(如‘a’等)
goto
使用时语句标号和goto必须在同一个函数内,语句标号和goto的前后位置无规定
for(初值,条件,初值变化){ 循环体;}
执行循序:初值->条件->循环体->初值变化->条件->循环体…
#include<stdio.h>
void main(){
int i;
for(i=0;i<3;++i){
printf("i1:%drn",i); //0 1 2
}
for(i=0;i<3;i++){
printf("i2:%drn",i); //0 1 2
}
}
?程序的四大区
代码区(Code):
指用来存放程序中执行代码的一块内存区域。区域大小在程序运行前就已经确定,并且内存区域通常属于只读,某些架构也允许代码段为可写,在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
数据区(data):
全局变量、字符串、静态变量
指用来存放程序中已初始化的全局变量的一块内存区域。属于静态内存分配。
堆(heap):
堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。
声明空间
返回值void指针
参数表示大小
如果内存申请失败(内存空间不足),则返回NULL
void *malloc(unsigned size);
释放空间
void free(void *p);
栈(stack):
是用户存放程序临时创建的局部变量的一块内存区域。也就是函数括号{}中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,函数在被调用的时候,其参数也会被压入发起调用的进程栈中,并且调用结束后,函数返回值也会被放入栈中。由于栈的先进后出的特点,栈特别方便用来保存/恢复调用现场。从这个意义上讲,可以把栈看成一个寄存、交换临时数据的内存区。
例子
int a = 数据区
char *p1; main()
{
int b; 栈区
char s[] = abc";char *p2;char *p3 = 123456p3在栈区,123456/0在文字常量区(数据区)
static int c = 静态初始化区(数据区)
p1 = (char *)malloc(10);
p2 = (20);分配得来的10和20字节得区域就在堆区。
}
(编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!