前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础知识 | 每日一练(102)

基础知识 | 每日一练(102)

作者头像
小林C语言
发布2019-09-02 16:21:42
3680
发布2019-09-02 16:21:42
举报

基础知识练习

士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ——菜根谭

学生:#pragma 是什么, 有什么用?

小林:#pragam 指令提供了一种单一的明确定义的 “救生舱”, 可以用作各种 (不可移植的) 实现相关的控制和扩展: 源码表控制、结构压缩、警告去除 (就像 lint 的老 /* NOTREACHED */ 注释), 等等。

学生:“#pragma once” 是什么意思?我在一些头文件中看到了它。

小林:这是某些预处理器实现的扩展用于使头文件自我识别; 它跟问题 10.5 中讲到的 #ifndef 技巧等价, 不过移植性差些。

学生:a[3] = "abc"; 合法吗?它是什么意思?

小林:尽管只在极其有限的环境下有用, 可它在 ANSI C 中是合法的。它声明了一个长度为 3 的数组, 把它的三个字符初始化为’a’, ’b’ 和 ’c’, 但却没有通常的 ’\0’ 字符。因此该数组并不是一个真正的 C 字符串从而不能用在 strcpy, printf %s 等当中。多数时候, 你应该让编译器计算数组初始化的初始值个数, 在初始值 “abc” 中,计算得长度当然应该是 4。

学生:为什么我不能对 void* 指针进行运算?

小林:编译器不知道所指对象的大小。在作运算之前, 把指针转化为 char * 或你准备操作的其它指针类型。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档