C语言声明

C语言声明,第1张

C语言声明 系列文章目录
  1. C语言综述1
  2. C语言字符集2
  3. C语言词法元素3
  4. C语言表达式4
  5. C语言语句5
  6. C语言声明6
  7. C语言预处理指令7
  8. C语言头文件8

文章目录
  • 系列文章目录
  • 前言
  • 1、声明
  • 2、声明区分符
  • 2.1、存储类区分符
  • 2.2、类型区分符
  • 2.3、类型限定词
  • 3、声明符
  • 3.1、括号声明符
  • 3.2、指针声明符
  • 3.3、数组声明符
  • 3.4、函数声明符
  • 4、初始化(Initialization)


前言

蓝色问号代表个人理解   绿色代表来源   红色问号代表尚有疑问

为什么要读标准?因为全面、权威,所有答案都在标准里面!
哪些人适合浏览本系列文章?不清楚C语言程序的组成,以及每个组成部分的详细内容
持续更新,码字不易,求点赞收藏


1、声明

约束
在相同的范围和名称空间,如果某个标识符没有链接,则该标识符的声明不得超过一个,即不能重复声明

2、声明区分符 2.1、存储类区分符
  1. typedef,将标识符定义为自定义类型名,typedef声明不会引入新类型
  2. extern,外部链接
  3. static,内部链接
  4. auto,默认值
  5. register,暗示该对象的访问可能快,这种暗示的有效程度由实现定义
2.2、类型区分符

类型区分符可以以任何顺序出现,可与其他声明区分符混合在一起

约束
只能是以下集合之一

  1. void
  2. char,signed char,unsigned char
  3. short, signed short, short int, signed short int
  4. unsigned short, unsigned short int
  5. int, signed, signed int, 没有类型区分符
  6. unsigned,unsigned int
  7. long,signed long,long int,signed long int
  8. unsigned long,unsigned long int
  9. float,double,long double
  10. 结构、 联合、枚举区分符
  11. 自定义类型名
2.3、类型限定词
  1. const
  2. volatile,在使用编译器优化的情况下使用

无论直接出现或通过一个或多个typedef出现,同一类型限定词不能在同一区分符表或限定词表中出现多次。

  1. 如果试图通过使用非限定类型来修改限定类型的对象,则行为未定义
  2. 如果试图通过使用非易失类型来易失类型的对象,则该行为是未定义的
  3. 如果数组类型包含任何类型限定符,则是对元素的限定
  4. 如果函数类型包含任何类型限定符,则行为未定义
  5. 如果两个限定类型相容,则两者都应为相容类型完全相同的限定形式
3、声明符

每个声明符声明一个标识符,并表明当某个表达式中出现与声明符形式相同的 *** 作数时,则该 *** 作数指示一个函数或对象,它们将使用声明区分符指示的作用域、存储期和类型,初值声明符即带初始化的声明符

3.1、括号声明符
#include 
using namespace std;

int main()
{
    
    int *(a[4]);		//我也不知道这是啥
    *a[4] = 5;
    cout << *a[4];
    return 0;
}
3.2、指针声明符
#include 
using namespace std;

int main()
{
    int b = 100;
    const int * c = &b;		//const int 型的指针,c的值是可以修改的
    int *const a = &b;		//int 型的 const的指针,a 的值不可以修改
    return 0;
}

3.3、数组声明符
#include 
using namespace std;

int main()
{
    int a[4];
    return 0;
}
3.4、函数声明符

约束
参数声明中能出现的唯一存储类区分符是register

#include 
using namespace std;

int test(int a, int b);
int test1(int, int);
int main()
{

    return 0;
}
4、初始化(Initialization)
  1. 赋值表达式

  2. {初值符表}

  3. {初值符表,}

  4. 初值符表即一个或多个初值符

  5. 初值符不得多于要初始化的对象

  6. 初始化的实体类型应为对象类型或未知大小的数组。

  7. 静态存储期对象、聚集、联合类型对象的表达式应为常量表达式

  8. 若某声明有块作用域且具有内部或外部链接,则该声明不应有初始化









以上纯属个人观点,欢迎大佬批评指正
  1. https://blog.csdn.net/init33/article/details/121258745 ↩︎

  2. https://blog.csdn.net/init33/article/details/121318734 ↩︎

  3. https://blog.csdn.net/init33/article/details/121319873 ↩︎

  4. https://blog.csdn.net/init33/article/details/121323883 ↩︎

  5. https://blog.csdn.net/init33/article/details/121323943 ↩︎

  6. https://blog.csdn.net/init33/article/details/121323932 ↩︎

  7. https://blog.csdn.net/init33/article/details/121323958 ↩︎

  8. https://editor.csdn.net/md/?articleId=121323994 ↩︎

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5521001.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存