C语言问题

文章目录

// 个人能力提升笔记

C语言495个问题

1、声明和初始化

C语言的声明语法实际就是一种小的编程语言。一个声明包含如下几个部分(但并非都是必不可少的):存储类型、基本类型、类型限定词、最终声明符、初始化列表。每个声明符不仅声明一个新的标识符,同时也表示标识符是数组、指针、函数还是其他类型的任意组合。基本的思想就是让声明符模仿标识符的最终用法。

1.1、如何觉得使用哪种整数类型

如果可能达到很大的数值,那么就使用long类型。否则如果空间很重要,就使用short类型。除此之外可以使用int类型,如果定义明确的一出特征很重要而且负值无关紧要,或者希望在操作二进制位和字节时避免符号拓展的问题,那么可以使用unsigned类型。

在决定使用float类型还是double类型时也有类似的空间时间权衡。很多编译器在表到时求值的仍然会把所有的float类型转换为double类型进行运算。但是如果一个变量的地址确定为特定的类型时,则不需要管以上规则。

很多时候,大家可能会错误的认为C语言类型的大小都有精确的定义,实际上能够确保的只有如下几点:

  1. char类型可以存放小于128的值
  2. short int可以存放小于等于32767的值
  3. long int可以存放小于等于2147483647
  4. char至少有8位,short int和int至少有16位,long int至少有32位。

1.2、为什么不精确定义标准类型的大小

尽管和其他高级语言比起来,C语言可能相对低级,但是它还是认为对象的具体大小应该由具体的实现来决定,在C语言中唯一能够让你以二进制位的方式指定大小的地方就是结构中的位域。多数程序不需要精确控制这些大小,那些试图达到这一目的的程序如果不这样做可能会更好。

如果你真的需要精确的控制类型大小,还是有几点需要注意:

  1. 在某些机器上可能没有严格的对应关系
  2. 如果定义int16和int32只是为了表明至少有这么长,那么就没有什么实际意义,因为int和long已经分别能表示这些
  3. typedef定义对于字节顺序问题不能提供任何帮助
  4. 你其实也不需要自己定义类型,标准头文件<inttypes.h>中已经定义了int16_t,uint32_t等类型

1.3、新的64位机器上的64位类型是什么样的

C99已经标准定义了long long类型,其长度可以保证至少64位,这种类型在某些编译器上实现已经颇有时日了。其他的编译器也实现了类似__longlong的拓展。

1.4、char *p1, p2;这个声明有什么问题,在使用p2的时候报错了

这样的声明首先是没有任何的问题的,但是它可能不是你想要的。指针声明中的*号并不是基本类型的一部分,它只是包含被声明标识符的声明符的一部分。也就是说在C语言中,声明的语法并非是:
类型 标识符

而是:
基本类型 生成基本类型的东西

其中"声明基本类型的东西"就是声明符,或者说是一个简单的标识符,或者是如图 *p、a[10]或者f()这样的符号,表明被声明的变量是指向基本类型的指针、基本类型的数组或者返回基本类型的函数。

在问题的声明里,无论空白处暗示了什么,基本类型都是char,而第一个声明符是 *p1。因为符号中带有 * 号,所以这里的p1代表的是一个指向char类型的指针。而p2的声明符只有p2,因此p2就是普通的char型变量。这可能就不是你所希望的,在一行中声明两个指针的方式如下:
char *p1, *p2;

声明风格

相关推荐
~yY…s<#>2 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
EricWang13583 小时前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端
我是谁??3 小时前
C/C++使用AddressSanitizer检测内存错误
c语言·c++
希言JY4 小时前
C字符串 | 字符串处理函数 | 使用 | 原理 | 实现
c语言·开发语言
午言若4 小时前
C语言比较两个字符串是否相同
c语言
TeYiToKu6 小时前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
互联网打工人no16 小时前
每日一题——第一百二十四题
c语言
爱吃生蚝的于勒6 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~6 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
洋2407 小时前
C语言常用标准库函数
c语言·开发语言