- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【原创】C语言高级用法-学习笔记
#的作用
#是将其后的变量直接转换为字符串
void WriteLog(arg)
{
printf(%s=%d,#arg,arg)
}
##的作用
##的作用是连接两个变量
如
#define combine_converse_str(x,y) x##y
int Err;
int Num;
printf(%s,combine_converse_str(Err,Num));
结果为:ErrNum
再如:
int a=1;
int b=2;
int ab=3;
printf(%d,a##b);
结果为: 3
后面那句相当于printf(%d,ab);
do{ }while(0)作用
1,空的宏定义避免warning:
#define foo() do{}while(0)
2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。
3,用在宏定义上并且当宏定义需要定义成多条语句的组合时,可以保证这几条语句是一个整体的,并且可以消除使用这个宏定义后添加;所带来的报错,例如:
#define aaa(x,y) \
do{ \
int a=0; \
int b=0; \
函数1(x); \
函数2(y); \
}while(0)
调用aaa(x,y); 时不会报错并且如果使用:
if (m)
aaa(1,2);
else
aaa(3,4);
时运行也不会使某些语句没有被运行到。
数组名的使用
数组名作为函数参数:数组名用在某个函数A的参数中时,处于函数传递效率原因,会被强制转换成了指针,此后在函数A内就完全是一个值等于对应数组首地址的指针变量,可自加自减等
注意!只有在作为函数参数的情况下才会将数组名强制转换成指针,其他的都不会转换。
另:数组名作为函数参数传递时,函数声明的写法有多种
int aaa(char x[])
int aaa(char x[1])
int aaa(char x[100])
int aaa(char *x)
作为函数参数时的参数声明也和普通的数组定义一样要合法,比如不能 int aaa(char x[0]),因为定义一个数组也不能用 char x[0]来定义,编译器在检查参数的声明合法后,如果发现参数是数组,就会强制转换成指针,所以int aaa(char x[1])和int aaa(char x[100])的结果是一样的。
数组名用在sizeof上:结果返回的是整个数组所占空间的大小,而不是一个指针的长度
数组名与和*:a与a与a[0]的值都相等,a是数组名,a是整个数组地址,a[0]是数组首元素的地址,他们都相等
int a[5]={1,2,3,4,5};
printf(a=%x\n,a);
printf(a=%x\n,a);
printf(*a=%x\n,*a);
printf(a[0]=%x\n,a[0]);
printf(*a[0]=%x\n,*a[0]);
printf(*(a[0])=%x\n,*(a[0]));
printf(*((int *)(a))=%x\n,*((int *)(a)));
printf(*(*(a))=%x\n,*(*(a)));
结果:
a=12ff34
a=12ff34
*a=12ff34 ---*与消掉,*a=a=0x12ff34
a[0]=12ff34
*a[0]=1 ---*与消掉,*a[0]=a[0]=1
*(a[0])=1 ---*与消掉,*(a[0])=*a[0]=a[0]=1
*((int *)(a))=1 ---*与之间有个强制类型转换(int *),无法直接消掉,所以按照括号次序来运算(int *)(a)=0x12ff34, *((int *)(a))=*(0x12ff34)=1
*(*(a))=1 ---*与消掉,*(*(a))=*a=1
指针数组:
定义:基类型?*数组名[]
使用:像普通的数组一样使用,数组名代表首地址,数组名[0]表示第一个元素的内容,以此类推。
常见的是字符串数组,例如:
char?*Names[]=????????{?????????????Bill,?????????????Sam,?????????????Jim????????};
实际内存中保存的就是
即首地址0x12ff0c{00x0042f2f4,0042201c},其中0址所保存的就是”Bill”,所以数组名Name=0x12ff0c
您可能关注的文档
- 【中考精英总复习】中考物理(人教)复习课件:第13讲 功 功率 机械效率.ppt
- 【中考考前冲刺+南方新中考】2015中考物理(南粤版)复习配套课件:经典错题集(共43张PPT).ppt
- 【中考试题研究】(重庆专版)2016中考物理 第一部分 考点研究 第三讲 质量与密度.doc
- 【中考试题研究】(重庆专版)2016中考物理 第二部分 题型研究 专题七 坐标曲线类.doc
- 【二轮精品】2015届高三化学二轮复习精品教学案:【专题三】 氧化还原反应与电化学原理.doc
- 【二轮精品】2015届高三化学二轮复习精品教学案:【专题八】 溶液中的离子反应.doc
- 【人声处理】13条人声处理技巧.doc
- 【人教版】2012届高三物理(浙江专用)复习课件:第8章第1讲 磁场的基本概念[来源:学优高考网564736].ppt
- 【人教版】中考物理《浮力》复习导学案(含答案).doc
- 【人教版】九年级化学上册:第1单元-课题3《走进化学实验室(第2课时)》ppt课件.ppt
- 【原创】人教版高中物理必修二+7-1+功+优质课件(共30张PPT).ppt
- 【原创课件】人教版高中物理3-1第三章6《带电粒子在匀强磁场中的运动》.ppt
- 【参考课件】第7节-静电现象的应用.ppt
- 【史上超强】C语言第1章.pptx
- 【同步推荐】人教版物理课件:选修3-1第3章 第6节 带电粒子在匀强磁场中的运动.ppt
- 【同步教学课件】七年级数学上册(华师大版):3.4.3 去括号与添括号.ppt
- 【同步精品资源套餐】2.3大气环境 第1课时 对流层大气的受热过程 精品课件 湘教新课标.ppt
- 【同课异构】高中数学人教A版选修2-1课件:2.1 曲线与方程 课件.ppt
- 【同策】大明宫中央广场钻石店2014年营销推广策略报告.pptx
- 【同课异构】高中数学人教A版选修2-1课件:2.1.2 求曲线的方程 课件.ppt
文档评论(0)