程序猿之---C语言细节1(==与=、函数指针、数组字符串printf、int ((b));、char b =‘abcd’)
来源:互联网 发布:linux 查看gpu显存 编辑:程序博客网 时间:2024/05/16 11:30
此系列使用编译器为mingw5,cfree,win7 64位
主要内容:==与=、函数指针、数组字符串printf、int ((b));、char b =‘abcd’
一、==与=
见代码给出易出错之处
二、函数指针
如何理解(*(void(*)())0)();
三、数组字符串printf、int ((b))
在求值时((b))是整型,则b也是整型,如函数int b(); 表达式b()求值结果为整型
四、char b =‘abcd’
char test = 'abcd'; // 编译器以后一个字符覆盖前一个字符处理,最终输出d
#include <stdio.h>int main(int argc, char *argv[]){char c;int ((b)) = 1; // 在求值时((b))是整型,则b也是整型,如函数int b(); 表达式b()求值结果为整型/* 引申如int *ff(); int (*ff)(); ()优先级高于* , <*ff()和*(ff())含义一样>第一个为函数ff,返回int型指针 * 第二个为ff函数指针,返回int类型 ;调用此函数的方法为(*ff)(); * (float (*)()) 表示一个“指向返回值为浮点类型的函数的指针”的类型转换符 * * 如何理解(*(void(*)())0)(); * 1、(void (*)())0 表示将常数0转型为“指向返回值为void的函数的指针” 类型 * 2、(void (*)())0 可以用来代替函数指针ff ,则 (*(void(*)())0)();是对函数的调用 * 可以typedef void (*func)(); (*(func)0)(); */int a = 0622; // 8进制 char hello[] = {'gke'/*只输出e*/,'a','d','\n','\0'}; // '\0'为字符串结束符 char test = 'abcd'; // 编译器以后一个字符覆盖前一个字符处理,最终输出d printf("test = %c\n",test);printf("b = %d\n",b); //这里如果我写成 printf("b = %d\n");输出b=100,为什么? while(c = " " || c == '\t' || c == "\n")// 始终为真,小心‘=’和‘==’ ,如果写成while( c == '\t' ||c = " "|| c == "\n")则出错,因为=优先级比while //里的其它运算符都低,可解释为while((c=='\t' || c) = (" " || c == "\n")) c == '\t' || c 不能出现在赋值运算 //符左边,常常我们写成while('\t' == c || " " == c || "\n" == c)这样==写成=编译器能检测出错误{printf("Hello C-Free!%d\n",a);printf(hello); // 输出字符串 printf(&a); //直接使用a出错,使用&a则没有什么反应,有警告但没出错 }return 0;}参考书籍《c陷阱与与缺陷》
输出:
0 0
- 程序猿之---C语言细节1(==与=、函数指针、数组字符串printf、int ((b));、char b =‘abcd’)
- 指针指向字符串常量和数组存放字符串常量(char *p="abcd", char p[]="abcd")
- 程序猿之---C语言细节9(宏定义、max(a,b)宏定义细节、大小端判断、(int&)a什么意思)
- C语言,数组与指针:int (*)p[4]; int *q; int a[4]; int b[3][4];
- C printf() 详解——printf('%08x',number); 程序员面试宝典中的一个错误 char * b=(char *)&a
- C printf() 详解——printf('%08x',number); 程序员面试宝典中的一个错误 char * b=(char *)&a
- C printf() 详解——printf('%08x',number); 程序员面试宝典中的一个错误 char * b=(char *)&a
- C printf() 详解——printf('%08x',number); 程序员面试宝典中的一个错误 char * b=(char *)&a
- C printf() 详解——printf('%08x',number); 程序员面试宝典中的一个错误 char * b=(char *)&a
- 程序猿之---C语言细节27(函数无参数时细节、函数默认返回int型证明、return默认还回值、void指针++操作)
- C语言数组a[b]=b[a]。。。。
- c语言==字符数组与字符串,char的取值范围(1)
- int b=10; int c=(++b)*(++b);c和c#中c的结果?
- #include int inc(int a) { return(++a); } int multi(int*a,int*b,int*c) { return(*c=*a**b); }
- 程序猿之--C语言细节4(数组及指针操作)
- 程序猿之---C语言细节14(字符串数组内存分配细节‘\0’空字符、字符串数组赋值细节、字符串换行连接和下标)
- 程序猿之---C语言细节12(指针和数组细节,"//"的可移植性说明)
- 数组字符串与指针字符串的区别 char s[]="***" 和char *s="***"的区别
- 在jsp中调用ActiveX控件播放视频
- HDU 2317 Nasty Hacks
- 后台执行oracle sql脚本
- Android LOG记录 & BUG分析
- Revenge of LIS II(HDU 5087)
- 程序猿之---C语言细节1(==与=、函数指针、数组字符串printf、int ((b));、char b =‘abcd’)
- 2014阿里巴巴笔试题
- 大赛计分
- TCP/IP学习笔记(一)
- 关于相对熵(KL距离)的理解
- 基于MapReduce的并行算法设计
- 多线程中atfokr的使用
- Ural 1091 Tmutarakan Exams [容斥原理]
- C#读取XML每个节点