C专家编程学习 1
1.C语言的基本数据类型直接与底层硬件相对应。
2#define 是可能出现问题
1
2
3
4
5
|
#define a(y) a_ex(y) a(x)被扩展为 a_ex(x) #define a (y) a_ex(y) a(x)被扩展为 (y) a_ex(y)(x) |
#define宏的用法
1.简单宏定义
1
|
#define a y |
将文件中的 a 全部换成 y
为了避免出现问题,要将宏展开,根据运算符的优先级判断是否是需要的运算顺序。
2.带参数的宏定义
1
2
|
#define a(y) a_ex(y) a(x)被扩展为 a_ex(x) |
#define a(y) a_ex(y) 中的a(y)的中间不能带空格否则成了简单的宏替换了
1
2
|
#define a (y) a_ex(y) a(x)被扩展为 (y) a_ex(y)(x) |
有空格,为简单的宏替换, a 换成 (y) a_ex(y)
a(x)替换后成了(y) a_ex(y)(x)
3.const
1
2
3
4
5
6
7
8
|
#include <stdio.h> void main() { char *pa; const char *pb; pa=pb; } |
1
|
C:\Documents and Settings\CHEN\桌面\ff\main.c|7|warning: assignment discards 'const' qualifier from pointer target type [enabled by default ]| |
1
2
3
4
5
6
7
8
|
#include <stdio.h> void main() { char *pa; const char *pb; pb=pa; } |
赋值合法
两操作数都是指向有限定符或无限定符的指针,则左边的指针所指向的类型必须具有右边所指向类型的全部限定符。
pa 为指向char 类型的指针,pb 是指向const char 类型的指针限定符为const
pa=pb 左边限定符为无,右边为const 不符合规则的。
pb=pa 左边限定符为const ,右边限定符为无,左边具有右边的全部限定符,故是符合规则的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#include <stdio.h> void main() { char *pa; const char *pb; char **pc; const char **pd; pb=pa; pc=&(pa); pd=&(pb); pd=pc; } |
pc为指针,指针指向指针,指针指向char
pd为指针,指针指向指针,指针指向const char
pc pd 指向的均为没有限定符的指针,且该指针指向的类型不一样。
4.算术转换
整型升级
int char short int型位段,,包括他们的有符号和无符号变型,以及枚举类型,在表达式中转化为 int 或 unsiged int
寻常算术转换
C专家编程学习 1的更多相关文章
- C语言学习书籍推荐《C专家编程Expert C Programming Deep C Secrets》下载
Peter Van Der Linden (作者) <C和C++经典著作 C专家编程Expert C Programming Deep C Secrets>展示了C程序员所使用的编码技巧, ...
- c专家编程摘录
C专家编程摘录 c操作符的优先级 有时一些c操作符有时并不会像你想象的那样工作. 下方表格将说明这个问题: 优先级问题 表达式 期望的情况 实际情况 . 优先级高于* *p.f (*p).f *(p. ...
- <<c专家编程>>笔记
C专家编程摘录 c操作符的优先级 有时一些c操作符有时并不会像你想象的那样工作. 下方表格将说明这个问题: 优先级问题 表达式 期望的情况 实际情况 . 优先级高于* *p.f (*p).f *(p. ...
- linux编程学习
linux编程学习 工具篇 “公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习 C 语言编程常常用到的软件和工具. (一)操作系 ...
- 现代3D图形编程学习-基础简介(3)-什么是opengl (译)
本书系列 现代3D图形编程学习 OpenGL是什么 在我们编写openGL程序之前,我们首先需要知道什么是OpenGL. 将OpenGL作为一个API OpenGL 通常被认为是应用程序接口(API) ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- 现代3D图形编程学习-基础简介(2) (译)
本书系列 现代3D图形编程学习 基础简介(2) 图形和渲染 接下去的内容对渲染的过程进行粗略介绍.遇到的部分内容不是很明白也没有关系,在接下去的章节中,会被具体阐述. 你在电脑屏幕上看到的任何东西,包 ...
- 现代3D图形编程学习-基础简介(1) (译)
本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...
- 现代3D图形编程学习-环境设置
本书系列 现代3D图形编程学习 环境设置 由于本书中的例子,均是基于OpenGL实现的,因此你的工作环境需要能够运行OpenGL,为了读者能够更好的运行原文中的示例,此处简单地介绍了linux和win ...
随机推荐
- jsp中JavaBean的用法
UserRegisterBean.java:这是JavaBean package JavaBean; public class UserRegisterBean { private String us ...
- 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...
- Linux - gcc和g++的区别
一般linux系统都自带了gcc编译器的,你可以用你的安装光盘去安装,如果你是觉得自带的gcc版本太低了,可以去gcc的官方网站可以下载到,编译需要很长的时间,如果你只编译C或者C++可以只下载gcc ...
- 浏览器Firefox新标签页默认打开地址设置
1.地址栏输入about:config 2.找到browser.newtab.url 修改它的值为你想要的地址,如:https://www.baidu.com
- 【转】 linux 安装nginx及编译参数详解
版权声明:本文为博主原创文章,未经博主允许不得转载. 从官网下载一个nginx 的tar.gz 版. 安装方式使用make 安装 第一步:解压 tar -zxvf nginx-1.7.4.tar.g ...
- centos虚拟机,环境配置
yum安装 yum -y install 包名(支持*) :自动选择y,全自动yum install 包名(支持*) :手动选择y or n 1.安装vim Centos默认自带VI,功能没VIM丰富 ...
- dom对象操作Html,Css
HTML: 1.不要再文档加载完使用document.write,这样会创建新的dom对象,原来的元素将被覆盖. 2.获取元素,通过getElementbyID; getElementbyTag(&q ...
- hdu 2037
PS: - -原本想的是排序开始时间和消耗时间..后来想到可以排序结束时间..后来还wa了一次,因为排序的时候溢出了 思路: 1 3 //13 4 //20 7 3 8 2 9 5 10 //36 ...
- C++中的::operator new, ::operator delete
一般在使用new 和 delete的时候,做了两件事情,一是空间的配置( new 是分配,delete是回收),而是调用对象的析构函数 但是也有办法将这两个过程分开 那就是显式的调用::operat ...
- UITableView全面解析,讲的好详细
--UIKit之UITableView 概述 在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是U ...