您的位置:

c语言命令讲解,c语言指令详解

本文目录一览:

C语言中的指令*p++、(*p)++、*++p和++*p分别有什么不同?

*(p++) 取(p+1)处地址的值。

*(++p) 取(p+1)处地址的值。和上面一样。

*++p 取(p+1)处地址的值。和上面一样。

*p++ 唯一不同的一个,先取p地址处的值,再对p执行+1。

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

特点:

1、C语言是一个有结构化程序设计、具有变量作用域以及递归功能的过程式语言。

2、C语言传递参数均是以值传递,另外也可以传递指针。

3、不同的变量类型可以用结构体组合在一起。

4、只有32个保留字,使变量、函数命名有更多弹性。

5、部份的变量类型可以转换,例如整型和字符型变量。

6、通过指针,C语言可以容易的对存储器进行低级控制。

7、预编译处理让C语言的编译更具有弹性。

c语言指令有哪些啊

第一章:绪论?

内核版本号格式:x.y.zz-www/x为主版本号,y为次版本号,zz为次次版本号,www为发行号/次版本号改变说明内核有重大变革,其偶数为稳定版本,奇数为尚在开发中的版本

第二章:基础?

文件种类:-:txt,二进制/d:目录/l:链接文件(link)/b:区块设备文件/c:字符设备文件/p:管道

目录结构:bin:可执行/boot:开机引导/dev:设备文件/etc:系统配置文件/lib:库文件/mnt:设备挂载点/var:系统日志/

命令:rmdir:删除空目录/find [path] [expression]/touch命令还可以修改指定文件的最近一次访问时间/tar -czvf usr.tar.gz path/tar –zxvf usr.tar.gz/tar –cjvf usr.tar.bz2 path/tar –jxvf usr.tar.bz2

gcc:预处理:-g/I在头文件搜索路径中添加目录,L在库文件搜索路径中

gdb:设置断点:b/查看断点信息:info

Makefile:make –f other_makefile/:第一个依赖文件的名称/@:目标文件的完整名称/^:所有不重复的依赖文件/+:所有依赖文件(可能重复)

第三章:文件IO

read:read(fd, temp, size); /读fd中长度为size的值到temp/返回0表示file为NULL

write:write(fd, buf, buf_size); /写长度为buf_size的buf内容到fd中

lseek:lseek(fd, offset, SEEK_SET); /从文件开头向后增加offset个位移量

unlink:从文件系统中删除一个名字

open1:int open(const char * pathname, int flags, mode_t mode);/flags为读写方式/mode为权限设置/O_EXCL:测试文件是否存在/O_TRUNC:若存在同名文件则删除之并新建

open2:注意O_NONBLOCK

mmap.1:void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offsize);

mmap.2:mmap(start_addr, flength, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

fcntl:上锁/int fcntl(int fd, int cmd, struct flock * lock);/对谁;做什么;设置所做内容

select:fd_max+1,回传读状况,回传写状况,回传异常,select等待的时间/NULL为永远等待/0为从不等待/凡需某状况则用之,反则(fd_set *)NULL之

FD_*那几个函数……

一般出错则返回-1

第四章:文件与目录

硬链接与符号链接?

chdir改变目录

0:in/1:out/2:err

第五章:内存管理

可执行文件存储时:代码区、数据区和未初始化区

栈:by编译器,向低址扩展,连续,效率高/堆:by程序员

/etc/syslog.conf,系统log记录文件/优先级为-20时最高

第六章:进程和信号

程序代码、数据、变量、文件描述符和环境/init的pid为1

execl族:int execl(const char * path, const char * arg, ....);/path即可执行文件的路径,一般为./最后一个参数以NULL结束

waitpid:waitpid(pid_t pid,int * status,int options);/option:一般用WNOHANG,没有已经结束的子进程则马上返回,不等待

kill:int kill(pid_t pid,int sig);/发送信号sig给pid

void (*signal(int signum, void(* handler)(int)))(int);/第一个参数被满足时,执行handler/第一个参数常用:SIG_IGN:忽略信号/SIG_DFL:恢复默认信号

第七章:线程

sem_init(sem_t *sem, int pshared, unsigned int value)/pshared为0/value即初始值

第八章:管道

1:write/0:read

第九章:信号量、共享内存和消息队列

临界资源:操作系统中只允许一个进程访问的资源/临界区:访问临界资源的那段代码

信号量:建立联系(semget),然后初始化,PV操作,最后destroy

共享内存没有提供同步机制

第十章:套接字

UDP:无连接协议,无主客端的区分/实时性

TCP:字节流/数据可靠性/网络可靠性

数据报:SOCK_STREAM/SOCK_DGRAM

其它

管道一章的both_pipe即父子进程间的全双工管道通讯

关系到信号和互斥的服务器-客户端程序

线程一章的class的multi_thread文件夹下的thread8.c

int main(void)

{

int data_processed;

int file_pipes_1[2];

int file_pipes_2[2];

char buffer[BUFSIZ + 1];

const char some_data[] = "123";

const char ch2p[] = "this is the string from child to the parent!";

const char p2ch[] = "this is the string from parent to the child!";

pid_t fork_result;

memset(buffer,'\0',sizeof(buffer));

if(pipe(file_pipes_1) == 0){

if(pipe(file_pipes_2) == 0){

fork_result = fork();

switch(fork_result){

case -1:

perror("fork error");

exit(EXIT_FAILURE);

case 0://child

close(file_pipes_1[1]);

close(file_pipes_2[0]);

printf("in the child!\n");

read(file_pipes_1[0],buffer, BUFSIZ);

printf("in the child, read_result is \"%s\"\n",buffer);

write(file_pipes_2[1],ch2p, sizeof(ch2p));

printf("in the child, write_result is \"%s\"\n",ch2p);

exit(EXIT_SUCCESS);

default://parent

close(file_pipes_1[0]);

close(file_pipes_2[1]);

printf("in the parent!\n");

write(file_pipes_1[1], p2ch, sizeof(p2ch));

printf("in the parent, write_result is \"%s\"\n",p2ch);

read(file_pipes_2[0],buffer, BUFSIZ);

printf("in the parent, read_result is \"%s\"\n",buffer);

exit(EXIT_SUCCESS);

}

}

}

}

#ifndef DBG

#define DBG

#endif

#undef DBG

#ifdef DBG

#define PRINTF(fmt, args...) printf("file-%s line-%d: " \

fmt, __FILE__, __LINE__, ##args)

#else

#define PRINTF(fmt, args...) do{}while(0);

#endif

int main(void)

{

PRINTF("%s\n", "hello!");

fprintf(stdout, "hello hust!\n");

return 0;

}

#define N 5

#define MAX 5

int nput = 0;

char buf[MAX][50];

char *buffer = "abcdefghijklmnopqrstuvwxyz0123456789";

char buf_r[100];

sem_t mutex,full,avail;

void *productor(void *arg);

void *consumer(void *arg);

int i = 0;

int main(int argc, char **argv)

{

int cnt = -1;

int ret;

int nput = 0;

pthread_t id_produce[10];

pthread_t id_consume;

ret = sem_init(mutex, 0, 1);

ret = sem_init(avail, 0, N);

ret = sem_init(full, 0, 0);

for(cnt = 0; cnt 6; cnt ++ ){

//pthread_create(id_produce[cnt], NULL, (void *)productor, cnt);

pthread_create(id_produce[cnt], NULL, (void *)productor, (void *)cnt);

}

pthread_create(id_consume, NULL, (void *)consumer, NULL);

for(cnt = 0; cnt 6; cnt ++){

pthread_join(id_produce[cnt], NULL);

}

pthread_join(id_consume,NULL);

sem_destroy(mutex);

sem_destroy(avail);

sem_destroy(full);

exit(EXIT_SUCCESS);

}

void *productor(void *arg)

{

while(1){

sem_wait(avail);

sem_wait(mutex);

if(nput = MAX * 3){

sem_post(avail);

//sem_post(full);

sem_post(mutex);

return NULL;

}

sscanf(buffer + nput, "%s", buf[nput % MAX]);

//printf("write[%d] \"%s\" to the buffer[%d]\n", (*(int*)arg), buf[nput % MAX],nput % MAX);

printf("write[%d] \"%s\" to the buffer[%d]\n", (int)arg, buf[nput % MAX],nput % MAX);

nput ++;

printf("nput = %d\n", nput);

sem_post(mutex);

sem_post(full);

}

return NULL;

}

void *consumer(void *arg)

{

int nolock = 0;

int ret, nread, i;

for(i = 0; i MAX * 3; i++)

{

sem_wait(full);

sem_wait(mutex);

memset(buf_r, 0, sizeof(buf_r));

strncpy(buf_r, buf[i % MAX], sizeof(buf[i % MAX]));

printf("read \"%s\" from the buffer[%d]\n\n",buf_r, i % MAX);

sem_post(mutex);

sem_post(avail);

//sleep(1);

}

return NULL;

}

求大神整理c语言指令符号及用法大全。

编译指令

编译指令

说明

#include

包含另一个文件

#define

定义一个宏(macro)或是常量

#undef

取消一个宏常量的定义

#asm和#endasm

在程序中加入汇编语言的程序

#ifdef、#ifndef、#else、#endif

用于条件式的编译

注解://—单行注解;

基本数据类型 (int,float,double,char,void)

数据类型

类型说明

长度(位)

数据长度

bit

1

0,1

char

字符

8

—128~127

unsigned char

无符号字符

8

0~255

signed char

有符号字符

8

—128~127

int

整型

16

—32768~32767

short int

短整型

16

—32768~32767

unsigned int

无符号整型

16

0~65535

signed int

有符号整型

16

—32768~32767

long int

长整型

32

—2147483648~2147483647

unsigned long int

无符号长整型

32

0~4294967295

signed long int

有符号长整形

32

—2147483648~2147483647

float

浮点数(实数)

32

0.175e-38~0.402e38

double

双精度浮点

32

0.175e-38~0.402e38

void

没任何数据

用户自定义数据类型格式

typedef struct{

数据类型 变量序列1;

数据类型 变量序列1;

...

}自定义数据类型的名称;

保留字

_at_,alien,bdata,break,bit,case,char,code,compact,const,continue,data,

default,do,double,far,else,enum,extern,float,for,goto,if,funcused,idata,int,

inline,interrupt,large,long,pdata,_priority_,reentrant,return,sbit,sfr,sfr16,

short,sigend,sizeof,small,static,struct,switchc_task_,typedef,using,union,

unsigned,void,volatile,while,xdata

常量表示法

常数

规则

范例

十进制

一般十进制格式

1234567890

二进制

开头加上0b

0b00001110

八进制

开头加上O

O0123

十六进制

开头加上0x

0xFF45

无符号整数常量

结尾加上U

30000U

长整数常量

结尾加上L

299L

无符号长整数常量

结尾加上UL

327800UL

浮点数的常量

结尾加上F

4.234F

字符常量

以单引号括起来

‘a’

字符串常量

以双引号括起来

“hello”

-----------------------------------------------------运算符-----------------------------------------------------

算术运算

运算符

说明

范例

执行结果

+

c=a+b;

c 等于10

d=a—b;

d 等于6

*

e=a*b;

e 等于16

/

f=a/b;

f 等于4

%

取余数

g=a%b;

g 等于0

++

加1

c++;相当于c=c+1;

c 等于11

——

减1

d——;相当于d=d—1;

d 等于5

=

等于

a=8;

设置a等于8

+=

先相加在等于

e+=5;相当于e=e+5;

e 等于21

—=

先相减在等于

f—=5;相当于f=f—5;

f 等于—1

*=

先相乘在等于

b*=5;相当于b=b*5;

b 等于0

/=

先相除在等于

a/=5;相当于a=a/5;

a 等于1

%=

先取余数在等于

a%=5;相当于a=a%5;

a 等于3

※假设a等于8,b等于2

比较运算

运算符

说明

范例

执行结果

==

等于

a==5

F

!=

不等于

a!=5

T

o:p

小于

a5

F

大于

a5

T

=

小于等于

a=5

F

=

大于等于

a=5

T

※比较运算结果是个布尔值既TRUE(真值)或FALSE(假值)。假设a等于8

逻辑运算

运算符

说明

范例

执行结果

AND

(a5)(a10)

T

||

OR

(a5)||(a10)

F

!

NOT

!(a10)

T

※逻辑运算结果是个布尔值既TRUE(真值)或FALSE(假值)。假设a等于8

位逻辑运算

运算符

说明

范例

执行结果

AND

a0x01

a等于1

|

OR

a|0x80

a等于0x85

~

NOT

~a

a等于0xFA

^

XOR

a^0xFF

a等于0xFA

左移

a1

a等于0x0A

右移

a1

a等于0x0A

※假设a等于5

----------------------------------------------------控制命令---------------------------------------------------

if语句

if(条件) 语句1;

else 语句2;

例:if(d==4) d=0; //如果d等于4就设置d等于0

else d++; //否则就将d加1

if(ticks==0) { //如果ticks等于0

ticks=1000; //ticks 设置成1000

counter[0]++; //counter[0]加1

}

嵌套if语句

例:if(counter[0]==10) {

counter[1]++;

counter[0]=0;

if(counter[1]==10) {

counter[2]++;

counter[1]=0;

}

}

switch语句

switch (变量) {

case 常量1:语句1; break;

case 常量2:语句2; break;

case 常量3:语句3; break;

......

default ; 语句n;

}

for循环

for (初值,条件,变化值) 语句;

例:for(i=0;i10;i++) x=x+i;

for(i=1;i10,i++)

for(j=1;j10,j++)

printf(“%d %d”,i,j);

无穷循环:

for( ; ; );

while循环

while (条件) 语句;

例:while (ch!=!’A’) ch=getche();

无穷循环:

while(1);

do/while循环

do {

语句;

...

} while(条件);

例:do {

ch=getche();

} while (ch!=”A”);

goto语句

loop1:

x++;

if(x100) goto loop1;

----------------------------------------------------指针和函数------------------------------------------------

指针的定义

数据类型 *指针变量的名字;

例: char *p;

int *x;

指针与数组

例: char filename[80];

char *p;

p=filename; //指针p存放filename的开始地址

int x[5]={1,2,3,4,5};

int *p,sum,i;

p=x; //指针p存放数组x的开始地址

for(i=0;i5;i++)

sum=sum+p[i]; //p[i]相当于x[i]

指针的运算

1.针变量前面加上*号就是取得指针所指向位置的内容。

例:int x[5]={1,2,3,4,5};

int *p;

p=x; //指针p存放数组x的开始地址

*p=10; //相当于设置x[0]等于10

2.变量前面加上符号,可以取得一个变量的位置。

例:int x,y;

int *p;

p=x; //指针p存放x的地址,相当于p是指向x 的指针

*p=1; //相当于设置x等于1

3.符号也可以加在数组的前面

例:int x[5];

int *p;

p=x[2]; //指针p存放x[2]的地址,相当于p是指向x[2]的指针

*p=50; //相当于设置x[2]等于50

函数

函数类型 函数名称(参数序列);

参数说明

{

函数的主体

}

例:void delay (void) { //不返回任何数据的函数

unsigned char i,j; //没有任何参数的函数

for(i=0,i255,i++)

for(j=0,j255,j++);

}

main()

{

...

delay(); //调用函数

}

例:unsigned char sum(unsigned chat a,unsigned chat b)

{

unsigned chat x;

check_GLCD_busyflag(); //函数中可以调用另一个函数

x=a+b;

return x; //return会返回x的数据

}

中断服务函数

void 中断服务程序的名称(void) interrupt 中断号码using 寄存器组号码

{

中断服务子程序主体

}

中断号码

#define IE0_VECTOR 0 //0x03

#define TF0_VECTOR 1 //0x0B

#define IE1_VECTOR 2 //0x13

#define TF1_VECTOR 3 //0x1B

#define SIO_VECTOR 4 //0x23

对于S51有定时器2

#define TF2_VECTOR 5 //0x2B

例:static void xint0_isr(void) interrupt IE0_VECTOR(或0) using 1

{

unsigned char i,j=0xFF;

for(i=0,i16,i++)

{

j++;

P1=j; //将数值输出到P1口

delay_4isr();

}

}

-----------------------------------------------------汇编语言--------------------------------------------------

在C中加入汇编语言

例:void delay100us()

{

#pragma asm

mov r7,#1

more: mov r3,#48

djnz r3,$

djnz r7,more

#pragma endasm

}

----------------------------------------------------宏(macro)----------------------------------------------

宏的定义

%*define (macro名称) (macro的指令)

例:%*define (write_1) (

setb DI

serb SK

clr SK

)

#define 宏的名称 宏的指令

例:#define uchar unsigned char

C语言中的符号总结

运算符的种类C语言的运算符可分为以下几类;

1. 算术运算符

用于各类数值运算,包括加减乘除求余自增自减共七种运算

{ ( + ) ,( - ),(* ) ,( / ) ,( % ),( ++ ),(-- )}。

2. 关系运算符

用于比较运算,包括大于(),小于(/span),等于(==),大于等于(=),

小于等于(=),不等于(!=)共六种。

3.逻辑运算符

用于逻辑运算,包括与()或(||)非(!)三种.

4.位操作运算符

参与运算的量,按二进制位进行运算,包括:

位与(),位或(|),位非(~),为异或(^),左移(),右移()共六种。

5.赋值运算符

用于赋值运算,分为:

简单赋值(=)

复合算术赋值(+=,-=,*=,/=,%=)

复合位运算赋值(=,|=,^=,=,=)三类共十一种。

6.条件运算符

这是一个三目运算符,用于条件求值(?:)。

7.逗号运算符

用于把若干表达式组合成一个表达式(,)。

8.指针运算符

用于取内容(*)和取地址()两种运算。

9.求字节数运算符

用于计算数据类型所占用的字节数(sizeof)。

10.特殊运算符

有括号(),下标[],成员(→, .)

1.C的数据类型

基本类型,构造类型,指针类型,空类型

2.基本类型的分类及特点

类型说明符 字节 数值范围

字符型char 1 C字符集

基本整型int 2 -32768~32767

短整型short int 2 -32768~32767

长整型 long int 4 -214783648~214783647

无符号型 unsigned 2 0~65535

无符号长整型 unsigned long 4 0~4294967295

单精度实型 float 4 3/4E-38~3/4E+38

双精度实型 double 8 1/7E-308~1/7E+308

3.常量后缀

L或l 长整型

U或u 无符号数

F或f 浮点数

4.常量类型

整数,长整数,无符号数,浮点数,字符,字符串,符号常数,转义字符。

5.数据类型转换

a自动转换

在不同类型数据的混合运算中,由系统自动实现转换, 由少字节类型向多字节类型转换。 不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边的类型。

b强制转换

由强制转换运算符完成转换。

6.运算符优先级和结合性

一般而言,单目运算符优先级较高,赋值运算符优先级低。 算术运算符优先级较高,关系和逻辑运算符优先级较低。 多数运算符具有左结合性,单目运算符、三目运算符、 赋值

7.表达式

表达式是由运算符连接常量、变量、函数所组成的式子。 每个表达式都有一个值和类型。 表达式求值按运算符的优先级和结合性所规定的顺序进行。

表示输出类型的格式字符 格式字符意义

d 以十进制形式输出带符号整数(正数不输出符号)

o 以八进制形式输出无符号整数(不输出前缀O)

x 以十六进制形式输出无符号整数(不输出前缀OX)

u 以十进制形式输出无符号整数

f 以小数形式输出单、双精度实数

e 以指数形式输出单、双精度实数

g 以%f%e中较短的输出宽度输出单、双精度实数

c 输出单个字符

s 输出字符串

标志字符为-、+、#、空格四种,其意义下表所示:

标志格式字符 标 志 意 义

- 结果左对齐,右边填空格

+ 输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号

# 对c,s,d,u类无影响;对o类, 在输出时加前

缀o 对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点

格式字符串

格式字符串的一般形式为: %[*][输入数据宽度][长度]类型 其中有方括号[]的项为任选项。各项的意义如下:

1.类型

表示输入数据的类型,其格式符和意义下表所示。

格式 字符意义

d 输入十进制整数

o 输入八进制整数

x 输入十六进制整数

u 输入无符号十进制整数

f或e 输入实型数(用小数形式或指数形式)

c 输入单个字符

s 输入字符串

转义字符

转义字符是一种特殊的字符常量。转义字符以反斜线”\”开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。

常用的转义字符及其含义

转义字符 转义字符的意义

\n 回车换行

\t 横向跳到下一制表位置

\v 竖向跳格

\b 退格

\r 回车

\f 走纸换页

\\ 反斜线符”\”

\’ 单引号符

\a 鸣铃

\ddd 1~3位八进制数所代表的字符

\xhh 1~2位十六进制数所代表的字符

广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表2.2中的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字?quot;A” ,\102表示字母”B”,\134表示反斜线,\XOA表示换行等。转义字符的使用

在C语言中,对变量的存储类型说明有以下四种:

auto 自动变量

register 寄存器变量

extern 外部变量

static 静态变量

自动变量和寄存器变量属于动态存储方式, 外部变量和静态变量属于静态存储方式。在介绍了变量的存储类型之后, 可以知道对一个变量的说明不仅应说明其数据类型,还应说明其存储类型。 因此变量说明的完整形式应为: 存储类型说明符 数据类型说明符 变量名,变量名…; 例如:

static int a,b; 说明a,b为静态类型变量

auto char c1,c2; 说明c1,c2为自动字符变量

static int a[5]={1,2,3,4,5}; 说明a为静整型数组

extern int x,y; 说明x,y为外部整型变量

与指针有关的各种说明和意义见下表。

int *p; p为指向整型量的指针变量

int *p[n]; p为指针数组,由n个指向整型量的指针元素组成。

int (*p)[n]; p为指向整型二维数组的指针变量,二维数组的列数为n

int *p() p为返回指针值的函数,该指针指向整型量

int (*p)() p为指向函数的指针,该函数返回整型量

int **p p为一个指向另一指针的指针变量,该指针指向一个整型量。

指针变量的赋值

p可以有以下两种方式:

(1)指针变量初始化的方法 int a;

int *p=a;

(2)赋值语句的方法 int a;

int *p;

p=a;

(1)取地址运算符

(2)取内容运算符*

求C语言命令详解

意思是定义一个void函数,命名为show_int,并传递一个整形参数x,括号里的int x,表示定义整形参数的意思