当前位置:网站首页>C专家编程 序
C专家编程 序
2022-08-01 21:00:00 【weixin_客子光阴】
1.展示优秀的C程序员所使用的编码技巧;
2.对C的历史、语言特性、声明、数组、指针、链接、运行时、内存以及如何进一步学习C++等问题进行了细致的讲解和深入的分析。
3.帮助有一定经验的C程序员成为C编程方面的专家;帮助C语言功底深厚的程序员站在C的高度了解和学习C++。
编程理念:任何人都可以享受编程。
编程应该是一项精妙绝伦、充满生机、富有挑战的活动,而讲述编程的图书也应能令读者时时迸射出激情的火花。
应用于PC和UNIX系统上的ANSI标准C语言,对C语言中与UNIX平台复杂的硬件结构(如虚拟内存等)相关的特性做了详细描述,也对PC的内存模型和Intel8086系列对C语言产生的影响做了全面介绍。
许多令C程序员困惑的主题:
*typedef struct bar{ int bar; }bar的真正意思是什么?
解析:
第一个bar是结构标签,第二个bar是结构中的成员变量名,第三个bar是结构类型。
#include <stdio.h>
typedef struct bar {
int bar;
int z;
}bar;
/*第一个bar是一个结构标签名
*第二个bar是结构中的一个类型为int的bar变量名
*第三个bar是一个结构类型名
*struct bar 结构类型
*struct bar bar 第一个bar是一个结构标签,第二个bar是一个对象名
*bar.bar 第一个bar是一个对象名,第二个bar对象名的成员变量
*/
int main() {
//error
/*typedef struct bar bac; //not allowed!
bac.bar = 5;*/
bar bar;
bar.bar = 3;
struct bar baz;
baz.bar = 4;
printf("sizeof(bar) = %d,sizeof(struct bar) = %d\nsizeof(bar.bar) = %d,sizeof(baz.bar) = %d\n",
sizeof(bar), sizeof(struct bar), sizeof(bar.bar), sizeof(baz.bar));
printf("bar.bar = %d, baz.bar = %d\n", bar.bar, baz.bar);
return 0;
}
/* 输出:
*/
*我怎样把一些大小不同的多维数组传递到同一个函数中?
解析:
通过压扁数组为一维数组可以把大小不同的多维数组传递到同一个函数中。
*为什么extern char *p;同另一个文件的char p[100];不能够匹配?
解析:
为什么人们会认为指针和数组始终应该是可以互换的呢?答案是对数组的引用总是可以写成对指针的引用,而且确实存在一种指针和数组的定义完全相同的上下文环境。不幸的是,这只是数组的一种极为普通的用法,并非所有情况下都是如此。当用p[i]这种形式提取这个声明的内容时,实际上得到的是一个字符。但按照指针的方法,编译器却把它当做是一个指针,把ASCII字符解释为地址显然是牛头不对马嘴。
*什么是总线错误(bus error)?什么是段违规(segmentation violation)?
解析:
总线错误(bus error)是因为未对齐的内存访问请求时,被堵塞的组件就是地址总线。对齐(alignment)的意思就是数据项只能存储在地址是数据项大小的整数倍的内存位置上。事实上,总线错误几乎都是由未对齐的读或写引起的。段违规(segmentation violation)一般是由内存管理单元(负责支持虚拟内存的硬件)的异常所致,而该异常则通常是由解除一个未初始化或非法值的指针引起的。
*char *foo[]和char (*foo)[]有何不同?
解析:
//foo is a array, elements in array is a pointer points to the char
char *foo[];
//foo is a pointer, pointer points to a array of char
char (*foo)[];
边栏推荐
- [Energy Conservation Institute] Ankerui Food and Beverage Fume Monitoring Cloud Platform Helps Fight Air Pollution
- Postman 批量测试接口详细教程
- Pytorch框架学习记录12——完整的模型训练套路
- 漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]
- 乐观锁批量跟新 纯SQL
- 织梦通过数据库查询调用当前文章的留言
- 技术栈概览
- SkiaSharp 之 WPF 自绘 五环弹动球(案例版)
- 移植MQTT源码到STM32F407开发板上
- 相亲模型与有限状态机
猜你喜欢
人工智能可信安全与评测
LTE time domain and frequency domain resources
excel高级绘图技巧100讲(二十二)-如何对不规则数据进行分列
响应式织梦模板清洁服务类网站
MySQL语法基础
Godaddy域名解析速度慢问题以及如何使用DNSPod解析解决
To promote energy conservation institute 】 【 the opinions of the agricultural water price reform
Buttons with good user experience should not have hover state on mobile phones
Pytorch框架学习记录8——最大池化的使用
网红驼背矫正产品真的管用吗?如何预防驼背?医生说要这样做
随机推荐
如何用Chrome编辑以及调试代码
tiup mirror genkey
Use WeChat official account to send information to designated WeChat users
用户身份标识与账号体系实践
4.1 配置Mysql与注册登录模块
Software you should know as a programmer
技术栈概览
KDD2022 | Self-Supervised Hypergraph Transformer Recommendation System
LeetCode每日一题(1807. Evaluate the Bracket Pairs of a String)
Go 语言中常见的坑
Internet使用的网络协议是什么
Pytorch框架学习记录12——完整的模型训练套路
tiup mirror clone
[Energy Conservation Institute] Ankerui Food and Beverage Fume Monitoring Cloud Platform Helps Fight Air Pollution
Excel advanced drawing techniques, 100 (22) - how to respectively the irregular data
漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]
Postman 批量测试接口详细教程
【Kaggle】House Prices
如何让定时器在页面最小化的时候不执行?
latex paper artifact -- server deployment overleaf