网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月05日漏签0天
c语言吧 关注:801,836贴子:4,375,884
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 首页 上一页 1 2 3 4 5 6 7 下一页 尾页
  • 256回复贴,共7页
  • ,跳到 页  
<<返回c语言吧
>0< 加载中...

回复:【入门贴】老是有人问我看什么书。c与指针。来一起看~~~

  • 只看楼主
  • 收藏

  • 回复
  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
赋值
赋值是表达式的一种,而不是某种类型的语句,所以只要是允许表达式出现的地方,都可以赋值。
赋值操作符把右边的操作数的值存储在右边的操作数的指定位置。但赋值也是个表达式,表达式就具有一个值。赋值表达式的值就是左边操作数的新值,它可以作为其他赋值操作符的操作数,如下面的例子:a=x=y+3;赋值操作符的结合性(求值顺序)是从右到左,所以这个表达式相当于:a=(x(=y+3));他的意思分开来写就是x=y+3;a=x;
警告:
在a=x=y+3中认为a和x 被赋予了相同的值的说法是不正确的。
如果x是一个字符型变量,那么y+3的值就会被截取一段,一边容纳与字符类型的变量中,那么a所赋的值就是这个被截短之后的值。在下面这个常见的错误中,这种截断正是问题的根源所在。
char ch;
while((ch=getchar())!=EOF)...
EOF需要的位数比字符类型值所能提供的位数要多,这也是getchar返回的一个整型值,而不是字符值的原因。然而,把getchar的返回值首先存储与ch中将导致它被截断。然后这个被截短的值被提升为整型并与EOF进行比较。这个存在错误的代码在使用有符号字符集的机器中运行时,如果去了一个值为\377的字节时,循环就会终止,因为这个值截短再提升之后与EOF相等。当者段代码再使用无符号字符集的机器上面运行时,这个循环将会永远也不会停止。


  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
复合赋值运算符
到目前为止,所介绍的操作符都还有一种复合赋值的形式:
+= ,-= ,*=, /=, %=,<<=,>>=,&=,^=,!=以下仅仅讨论+=操作符,其余类似。
a+=expression等价与a=a+(expression)
唯一不同之处就是+=操作符的左操作数只求值一次。注意括号:他们确保表倒是在执行加法运算之前已经被完整求值,即使它内部包含用优先级低于加法运算的操作符。
存在两种增加一个变量值的方法有何意义?
首先,可以让程序员写的更加清楚一些。其次,编译器可以产生更加紧凑的代码。
(在数组,指针那种东西中这个可以减少运行的运算量)
提示
+=操作符的优点就是是源代码更加容易阅读和书写。


2026-02-05 17:54:56
广告
不感兴趣
开通SVIP免广告
  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
书上面有个程序比较好。
返回参数中值为1的个数

当然,直接下面那样也可以

结果是一样的~~~


  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
单目操作符
c具有yixie单目操作符,也就是只接受一个操作数的操作符。他们是
! ++ - & sizeof ~ -- + * (类型)
!操作符对他的操作数执行逻辑反操作,如果操作数为真,其结果为假,如果操作数为假,其结果为真。和关系操作符一样,这个操作符实际上产生的一个整型结果,0或1。
~操作符对于整型类型的操作数进行求补操作,操作数中所有原型为1的位变成0,所有原先为0的为变成1。
-操作符产生操作数的负值。
+操作符产生操作数的值。换句话说就是什么都不做,这个就是为了和-对应。
&操作符产生它的操作数的地址。
*操作符是间接方位操作符,它与指针一起使用,用于访问指针所指向的值。例子:
int a,*b;b=&a;这个语句里面b的值是a的地址,*b的意思就是指向b地址的值,即a。
sizeof操作符判断他的操作数类型长度,以字节为单位表示。操作数既可以是个表达式也可以是单个变量;也可以是两边加上括号的类型名。
(类型)操作符被称为强制转换(cast),它用于显式的把表达式的值转换为另外的类型。例如,为了获得整型变量a对应的浮点数的值,可以(float)a;
强制转换这个名字很容易记忆,它具有很高的优先级,所以把一个强制类型转换放在一个表达式的前面只会改变表达式的第一个项目的类型。如果要对整个表达式的结果进行强制转换,你必须把整个表达式用括号括起来。
(然后就是一直不停的有人问我的一个蛋疼的东西,++,--)


  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
++,--操作符都有两种变形。就是前缀式和后缀式。两个操作符的任意一种变种都需要一个变量而不是一个表达式作为他的操作数。实际上这个限制不是很严格。这个操作符仅仅要求操作数必须是一个“左值”,所谓的左值就是赋值运算符左边的值。这个以后说。
前缀形式的操作符出现在操作数的前面。操作数的值被增加,而表达式的值就是操作数增加后的值。后缀形式的操作符出现在操作数的后面。操作数的值仍被增加,但是表达式的值是操作数增加前的值。这个规则很容易记住,在操作数之前的操作符在变量值被使用之前旧增加了它的值,在操作数之后的操作符在变量值被使用之后才增加他的值。--操作符的工作原理与这个相同,只是他所执行的是减值操作,而不是增值操作。
例子:
int a,b,c,d;
a=b=10; a和b的值都是10;
c=++a; a的值是11,c的值是11;
d=b++; b的值是11,但是d的值是10;


  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
关系操作符
这类操作符用于测试操作数之间的各种关系。c提供的所有常见的关系操作符。不过者组操作符里面存在一个陷阱,这些操作符是:
> < >= <= == !=
前四个操作符的功能一看便知。!=操作符用于测试不相等。==操作符用于测试相等。
尽管关系操作符所实现的功能和你预想的一样,但是他们实现功能的方式可能和你预想的大相径庭。
这些操作符所产生的结果都是一个整型值,而不是一个布尔值。如果来年高端的操作数符合操作符指定的关系,表达式的结果是1,如果不符合,表达式的结果是0。关系操作符的结果都是整型值,所以它可以赋值给整型变量,但通常他们用与if和while语句中,作为测值表达式。这些语句的工作方式:表达式的结果为0,它被认为是加链表大师的结果是任何非零的值,则被认为是真。所有关系操作符的工作原理相同,如果操作符两端的操作数不符合它指定的关系,表达式结果为0,因此单纯从功能上面来说,我们并不需要额外的布尔数据类型。(事实上,c语言也没有布尔数据类型。)
自然语言中常使用=作为比较,然而c语言中使用==作为比较,=作为赋值。并不是c语言的创始人吃饱了撑的蛋疼菊紧。而是他仔细的做过统计,发现在c语言编写代码的过程中赋值使用的频率要远远大于比较。所以使用了=这个只需要敲一下的东西作为赋值,使用==需要敲两下的东西作为比较。你编码多了之后就会明白了。


  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
逻辑操作符
逻辑操作符有&&和||
这两个操作符用于对表达式的求值,测试他们的值是真还是假。
expression1 && expression2
如果expression1和expression2都是真的,那么整个表达式的值,也就是真的。如果两个表达式的中任何一个表达式的值是假的,那么整个表达式的值就是假的。
&&操作副的优先级要比<>都要低。
尽管他的优先级低,但是仍然会对两个关系表达式施加控制。下面是它的工作原理:
&&操作符的左操作数总是首先进行求职,如果它的值为真,然后旧紧接着对右操作数进行求值。如果左操作数的值为假,那么右操作数就不再进行求值,因为整个表达式的结果一定是假。这个行为被称为“短路求值(short-sircuited evaluation)”。
所以要使用的这两个操作符 的时候注意这点。


  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
条件操作符
条件操作符接受三个操作数。他也会控制字表达式的求值顺序。
expression1?expression2:expression3
条件操作符的优先级非常低,所以它的各个操作数即使不是用括号,一般也不会有问题,但是为了清楚起见,还是加上括号的好。(不然自己写的也会看不懂)
首先计算的是expression1如果他是真的那么整个表达式的值就是expression2,如果他是假的那么整个表达式的值就是expression3,同时expression2不会求值。
这个东西看着没用实际上,减少了很多代码量。
if(a>5)b=3;else b=4;这个可以写成b=(a>5)?3:4;


2026-02-05 17:48:56
广告
不感兴趣
开通SVIP免广告
  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
逗号操作符
主要就是把两个语句分开。返回值是最后一个表达式的值。
用法的话,我只会在循环里面用:
int i=0;
for(;i<10;j++,i++){......}
这样的化,j++和i++都会执行
while(count=10,b=10,a>0){...}
和上面那个一样。
以上所说的是操作符里面最基础的东西,没有什么难度,最比较容易混的是++和--。这个要记住的是每一个变量只占一个地方,改变了是不能变回去的。所以先计算还是先赋值很重要。就是说操作符的位置很重要。还有就是三目运算符恨常用,尽量使用。


  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
布尔值
c并不具备显式的布尔类型,所以使用整数来替代。其规则是:
零是假的,任何非零值都是真的。然而没有说1这个值比其他的非零值更真。
警告:
#define FALSE 0
#define TRUE 1
第一对:if(flag==FALSE)和 if(!flag)
第二对:if(flag==TRUE)和 if(flag)
当flag是任意的整型值的时候,第二对语句并不是等价的。只有当flag确实是FALSE和TRUE的时候才是等价的。
所以一般不要定义布尔类型。直接是用0和1,在读代码的时候用正来表示真。


  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
左值和右值
这个东西是编译器的设计者搞出来的,看看编译原理会知道。和c语言不是严格的吻合。
左值就是那些能够出现在赋值符号左边的东西。右值就是那些可以出现在赋值符号右边的东西。
之后会有一个表格说着个东西。


  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
表达式求值
隐式类型转换
c的整型算术运算总是至少以缺省整型的精度来进行的。为了获得者个精度,表达式中的字符性和端正性操作数再试用之前被转换为普通整型,这种转换称为整型提升。
char a,b,c;
a=b+c;
这个过程中,abc先被提升为普通整型,然后执行加法运算。加法运算的结果将被截短,然后在存储与a中。这个例子的结果和使用8位的算数的结果道理是一样的。但是在下面这个例子里面他的结果接不相同了。
a=(~a^b<<1)>>1;
由于求补和左移操作,所以8位的精度不够。标准要求进行完整的整型求值所以对于这类表达式的结果,不存在歧义性。


  • 御宅小受
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
算术转换
如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数转换为另外一个操作数的类型,否则操作就无法进行,下面的层次体系称为寻常算数转换(usual arithmetic conversion)。
long double
double
float
unsinged long int
long int
unsigned int
int
如果某个个操作数的类型再上面这个列表中的排名较低,那么它首先将转换为另外一个操作数的类型然后操作。
警告:
int a=5000;
int b=25;
long c=a*b;
这个代码在32为的整数计算机上面没有问题,但是在16为的机器上面就会产生溢出。
解决方案就是执行乘法运算之前霸气中一个或者两个操作数转换为长整型。
long c=(long)a*b;
当整型转换为float型的值的时候,也有可能所示精度。float型值仅仅要求6为数字的精度,如果将一个超过6为数字的整型值赋值给一个float型的变量的时候,其结果可能是该整型的近似值。
当float型值转换为整型值的时候,小数部分被舍弃(不进行四舍五入)。如果浮点数的值过于庞大,无法容纳的与整型值中,那么其结果将是未定义的。


  • King丶Sir2
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
先收藏,再慢慢琢磨。
——西北有佳人,自挂东南枝。


2026-02-05 17:42:56
广告
不感兴趣
开通SVIP免广告
  • 执笔写下情2000
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
书读百遍……~


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 首页 上一页 4 5 6 7 下一页 尾页
  • 256回复贴,共7页
  • ,跳到 页  
<<返回c语言吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示