接着c语言

1 .单双引号的使用
#include <stdio.h>
int main()
{
//printf("\n");
printf('\n');
return 0;
}
这个程序会产生段错误,关于printf()函数的使用,这样可以深究到
printf函数的内部,其原型是printf(char *fnt);
printf('\n');其实就是fnt的值就是\n的assci值,这样
printf会将这个值保存到低位段,但是这个低位段是系统自己的使用保存段
所以会产生,段错误。
c语言中单引号用来表示字符常量,c语言中的双引号用来表示字符串常量
2.逻辑运算符
#include <stdio.h>
main()
{
int i=0;
int j=0;
if(++i>0||++j)
{
printf("%d %d",i,j);
}
}
结果是1,0
程序改为是:


#include <stdio.h>
main()
{
int i=0;
int j=0;
if(++i>0&&++j)
{
printf("%d %d",i,j);
}
}
结果是:1,1
解释:&&是表达式从左向又计算,一直计算完场
但是,要是||这个表达式要是有一个是真的话,后面的语句就不会计算;


#include <stdio.h>
int g=0;
int f()
{
return g++;
}
int main()
{
if(f()&&f())
{
printf("%d",g);
}
printf("%d",g);
return 0;
}
打印结果应该是0;


3 !的使用,c语言之中的逻辑运算符,见到1就是0,见到0就是1
他认识0和1,见到其他的都是0;
4.三目运算符。(a?b:c) 假如a的值为真
就是b否则就是C的值。
4++与--
列子:
++i+++i+++i的值计算方法
这个计算时就是如果使用编译器编译程序,这个表达式会报错
但是计算方法可以使用贪心法则:
编译器处理的每个符号应该尽可能多的字符
编译器从左向右的次序读入,当读入的字符不可能和已读入的字符组成合法的表达式时就会报错
这个就是计算我个人理解是(++i++)+i++(+i)最后结果是11.不对之处请指出




#include <stdio.h>
typedef struct _demo
{
int *pInt;
float f;
}Demo;
int func(int v,int m)
{
return (v & m !=0);
}


int main()
{
Demo *pD=(Demo *)malloc(sizeof(Demo));
int *p[5];
int *f();
int i=0;
i=1,2;
pD->f=0;
free(pD);
return 0;
}
C语言之中的优先级考虑 
.的优先级高于*,使用->可以消除这个问题 *p.f结果是对p取f便宜,作为指针
然后进行解除引用操作,相当于*(p.f)
[]的优先级高于* ,int*ap[] ap
是个元素为int的指针的数组相当于int*(ap[]);
函数()的优先级高于* int *fp()是说fp()是个函数返回值是
int*。相当于int*(fp());
==和!=的优先级高于位操作,(val &mask!=0)的意思是:val&(mask!=0)


==和!=的优先级高于赋值运算符。c=getchar()!=EOF,相当于c=(getchar()!=EO
F);
算术运算符的优先级高于位运算符msb<<4*lsb


相当于msb<<(4*lsb);
逗号运算符的优先级在所有的优先级中最低







































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值