C语言陷阱之逗号表达式
多维数组的各个下标必须单独出现在一对方括号内,在什么条件下,下列这些代码段可以通过编译而不会产生任何警告信息。
int array[10][20];
...
i = array[3,4];
咋一看array[3,4] 不合法,实际上这是合法的,因为C语言里面这个是逗号表达式。
逗号运算符是二元运算符:
表达式1 , 表达式2
逗号运算符确保操作数被顺序地处理:先计算左边的操作数,再计算右边的操作数。右操作数的类型和值作为整个表达式的结果。左操作数只是为了副作用需要而被计算,它其值会被丢弃。
所以:3,4是逗号表达式,会抛弃左边的值,表达式结果为4,array[3,4]就是array[4],这是一个指向一维数组的指针,定义为int (*p)[20],
所以当i的类型是一个整形指针或者整形数组指针时编译正确不会有警告。
int32_t array[10][20];
int * i = array[3,4];
int (*p)[20] = array[3,4];
> p p
$1 = (int (*)[20]) 0x7fffffffe480> p &p
$2 = (int (**)[20]) 0x7fffffffe660> p i
$3 = (int *) 0x7fffffffe480> p &i
$5 = (int **) 0x7fffffffe668
所以当面对逗号表达式时需要特别小心。
C语言陷阱之逗号表达式相关推荐
- c语言赋值一个字母,c语言赋值后面有逗号 c语言赋值与逗号表达式问题
C语言提供一种特殊放入运算符:逗号运算符 表达式1,表达式2 逗号表达式的分享解过程是: 先分享表达式1,再分享表达式2 整个逗号表达式的值是表达式2的值,如表达式"3+5,6+8" ...
- (C语言)关于逗号表达式
一些特点 1.逗号表达式是C语言优先级最低的运算符. 2.逗号表达式是左结合性(即按从左到右顺序运算)的运算符. 常见表达式 //例一 #include<stdio.h> void mai ...
- c语言中有关逗号表达式
#include <stdio.h> int main() { int a=1,b=4,c=6,x,y,y1; y=(x=a+b),b+c; y1=((x=a+b),(b+c)); pri ...
- C语言中的逗号表达式
#include <stdio.h>int main() {int a = 1;int b = 5;int c = 3;int d = (a = b - c, b = a - c, c = ...
- C语言逗号运算符和逗号表达式
在C语言中逗号","也是一种运算符,称为逗号运算符. 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式.其一般形式为:表达式1,表达式2 其求值过程是分别求两个表达式的 ...
- 【C语言进阶深度学习记录】十四 C语言中 三目运算符和逗号表达式
文章目录 1 三目运算符 1.1 三目运算符的返回类型的代码案例分析 2 逗号表达式 2.1 逗号表达式代码案例分析 2.2 如何用一行代码实现 strlen函数 3 总结 1 三目运算符 三目运算符 ...
- C语言逗号表达式 - C语言零基础入门教程
目录 一.C 语言逗号表达式简介 1.逗号表达式书写形式 2.逗号表达式计算结果 二.C 语言逗号表达式实战 1.逗号表达式的使用 2.逗号表达式与赋值表达式区别 三.猜你喜欢 零基础 C/C++ 学 ...
- C语言:逗号表达式(辨析)
逗号表达式:是C语言中的逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,①从左往右逐个计算表达式,②整个表达式的值为最后一个表达式的值. --百度百科 如果令x的初始值为1的话,++x与x+ ...
- 【c】c语言中逗号运算符和逗号表达式
刚开始学习C语言时,对逗号去处符和逗号表达式非常困惑,本文给了我很大的帮助. 来自:百度空间-软件工程师 C语言提供一种特殊的运算符--逗号运算符.用它将两个表达式连接起来.如: 3+5,6+8 称为 ...
最新文章
- Https单向认证和双向认证介绍
- oracle冷备份 代码,Oracle冷备份和恢复自动产生sql源代码
- 吴恩达 coursera AI 专项五第一课(上)总结+作业答案
- 侏罗纪显示服务器超时,侏罗纪世界进化服务器无法访问解决方案推荐
- 青春可长可短, 就看自己如何度过(亦或者如白驹过隙, 稍纵即逝 正所谓且行且珍惜)...
- 关于构造函数和this调用的思考
- leetcood学习笔记-2-两数相加
- 7-2 银行排队问题之单窗口“夹塞”版 (30 分)
- php+数组存放文件名_php将数组存储为文本文件的三种方法
- Python知识整理_1
- PHP获取汉字的拼音(支持首字母和全拼)
- MySQL数据库的完美卸载
- android和夜神模拟器哪个好,天天模拟器和夜神安卓模拟器哪个好 两者功能对比...
- java实现批量注册_Java写的批量域名注册查询程序
- 底层码农的Stanford梦 --- 从SCPD开始 [转]
- 网易有道的喜与忧:11亿营销费抢市场,与跟谁学之间还差一个有道
- WPS文档怎样转换为图片
- 关于成本核算方法、步骤、成本分析
- 框架流程图绘制工具OmniGraffle 7 for Mac
- 使用python selenium爬取淘宝商品信息 自动登录淘宝和爬取某一宝贝的主图,属性图和详情图等等