c语言知识点.docx
- 文档编号:9658707
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:18
- 大小:19.43KB
c语言知识点.docx
《c语言知识点.docx》由会员分享,可在线阅读,更多相关《c语言知识点.docx(18页珍藏版)》请在冰豆网上搜索。
c语言知识点
宏使用:
在编译之前进行替换
1.
#defineN5;N后面为字符串可以有;
程序:
#defineN5L//不分配空间,由于没有数据类型,经常做数组的下标
intmain(void)
{
intn=N;//5L替换为宏展开,节省时间浪费空间,只是简单的替换,不做错
//误检测,不必加分号
printf(“%d\n”,n);
return0;
}
执行正确
#include
#defineS(a,b)a*b
intmain(void)
{
intn=S(4+5,5+6);
}
#definestr(a)#a//#会将后面的内容转换为字符串
voidmain()
{
printf(“%s\n”,str(123));
}
#definefn(a,b)a##e##b//转换为2e3=
voidmain()
{
intn=fn(2,3)
printf(“%d\n”,n);
}
#definemax(a,b)((a)>(b)?
(a):
b))//注意括号的用法
voidmain()
{
intn=max(4,6)/max(2,3);
printf(“%d\n”,n);
}
#defineswap(a,b)(a=a+b;b=a-b;a=a-b;)
voidmain()
{
inta=5;
intb=6;
swap(a,b);//注意这里不可以用常量
printf(“%d,%d\n”,a,b);
}
宏不会分配空间,函数在运行时在进行调用,会浪费时间节省;
函数调用时首先为形参,以及返回值分配空间,后为函数中的局部变量分配空间,返回时出栈与入栈的顺序正好相反。
注:
宏函数与函数的区别:
(1)宏在预编译的时候进行替换,不进行类型的检测,而函数在运行时调用,并且进行类型检测。
(2)宏在替换时不为变量分配空间,而函数会为变量分配空间。
(3)宏只是进行代码的扩展,因此增加了代码的空间,节省了压栈出战的时间;而函数浪费了时间节省了空间
(4)函数有返回值而宏没有返回值一说。
(5)函数在类型不一致时有类型的转换,而宏没有。
指针:
voidmain()
{
inti=258;
chara[4];
strcpy(a,"12345");
printf("%d\n",i);//结果是53,
}
voidmain()
{
inta=20;
intb=30;
intc;
c=(a++)>(b--)?
(a++):
(b--);
}
指向是通过地址来体现的。
int*p,q;//q为int类型
NULL为合法的空间0号内存空间,但是不可以放置内容
int*p=NULL;//是给p赋值
p==NULL;p!
=NULL;
*****零的不同的表示方法0‘\0’NULL
在定义一个指针时要进行赋NULL,好习惯
不定义为unsigned由于对指针有特定的运算,例如++
voidfn(int*a,int*b)
{
*a+=2**b;//是否等价
*a+=*b;
*a+=*b;
}
voidmain()
{
inta=5;
intb=6;
fn(&a,&b);
}
#definea*p
#defineb*q
voidmain()
{
intx;
int*p=&x;
int*q=&y;
a=4;
b=5;
printf(“%d\n”,a+b);
}
voidmain()
{
intI=4;
Chara[4];
strcpy(a,”12345”);
printf(“%d\n”,i);//输出53,如果257则输出的是53
}
voidmain()
{
inti=4;
chara[4];
strcpy(a,”1234”);
printf(“%d\n”,i);//输出53,如果i=257则输出的是256
}
voidmain()
{
inti=0x10101;
chara[4];
strcpy(a,"12345");
printf("%d\n",i);//输出53,如果257则输出的是53
}
voidswap(int*x,int*y)
{
int*t;
*t=*x;
*x=*y;
*y=*t;
}
voidswap(int*x,int*y)//可以交换两个值
{
inta;
int*t;
t=&a;
*t=*x;
*x=*y;
*y=*t;
}
*p++
*(p++)
(*p)++//后加比*的优先级高
*++p//右结合性
intb[10]={1,2,3,4,5,6,7,8,9,0};
for(int*p=b;p
b[i]*(b+i)*(p+i)p[i]*p++
指针变量可以做数组名用,但是数组名不可以做指针用,由于指针可以自增,而数组名不可以。
voidmain()
{
inta[5]={1,2,3,4,5};
int*p;
p=(int*)(&a+1);//&a是行指针
printf(“%d,%d”,*(a+1),*(p-1));
}
//第i+j行的地址a[i+j]&a[i][j]
//*(a+i+j)!
=*(a+i)+j
**aa[0][0]*(*(a+i))a[i][0]*(*a+j)a[0][j]//a为行指针
inta[3][4];//a中放有3个元素,是3行a+1&a[1][0]a[0]+1&a[0][1]
int*p=a;
p+4*i+jp[i][j]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 知识点