首页 > 其他分享 >c语言学习总结(原创)

c语言学习总结(原创)

时间:2022-10-22 16:13:07浏览次数:48  
标签:总结 char 原创 语言 s0 a1 盒子 标识符 变量

什么是标识符? 标识符是用来标识变量、函数、类、模块,或者任何其他用户自定义项目的名称,用它来命名程序正文中的一些实体,比如函数名、变量名、类名、对象名等。如:int a1=0; const b1="hello"中 a1和b1都是标识符,不过a1是变量,也就是存储单元的标识符,b1是数据字符串的标识符

什么是关键字?关键字是C语言提供的有特殊含义的符号,也叫做“保留字”。C语言一共提供了32个关键字,这些关键字都被C语言赋予了特殊含义 如: while include if else define const 等等

c程序运行的实质

就是执行环境程序顺序解析每个语句再执行的过程,解析语句也称为解释语句,就是按照关键字和标识符代表的含义来解释成执行动作。

如 int a1=1; a1=a1+1;这两句:

第一句,int a1=0 :执行环境顺序读到"int "关键字了,就知道需要声明4个字节的空间,看到a1,就知道要作下记号,标记a1作为这4个字节空间(盒子)的记号,然后给a1所代表的这个盒子赋值为0;

第二句,a1=a1+1, 先从等号右边开始解释,看到等号右边的a1了,就是要读取a1代表的盒子里面的数值,读取就是复制,读取后,将数值加1,然后将新数值赋值给等号左边的a1盒子

指针变量作为用于存储地址的变量,操作方法和上述完全一样。

总而言之,就是:盒子(也就是变量)可以读取、赋值,数值只能读取。

特殊写法的标识符,*变量名 与 数组名[],如语句 *s1= s0[0]; s0[0]与*s1都是代表变量盒子的标识符,不要理解成为操作符。

c语言语法不严格使人造成的误解:

1 char *p0;的声明 注意 char *p0=null; 其实正确写法应是 char* p0=null;但两种写法编译都可通过,前种写法容易使人误解为在声明char类型变量。

2 函数参数中关于数组的声明 如 int func(char[] c1) int func(char[10] c1) int func(char* c1) int func(char *c1) 这四种声明方式效果完全相同,函数在声明参数时都是在声明一个字符串变量或数组的指针变量,没有任何区别,但四种写法很容易让人误解,特别是第二种,无任何意义 ,实际传参时,无论数组元素数大于或小于10都不受影响。

c语言的函数参数不允许数组作为一个整体传值,要实现传递数组,只能依靠传递数组的指针变量来实现。

c程序容易引起迷惑的地方 *的含义

如下面两句 char *p1=”hello”;//这句话的*不是标识符,是操作符,是在声明p1是个指针型变量。

*p1='w';//这句话的*却是标识符,不是操作符,*和p1合在一起标识数组"he"第一个元素所在的存储盒子

程序代码重点举例

#include<stdio.h>
int main()
{
    char a1='2';
    char* p0="world";//这个声明的意思是,声明一个用于存放char型地址的存储单元,并在这个存储单元里赋予字符串"world"的地址
    char *p1="hello";//这种声明格式是c语言语法不严格的一个bug,容易让人误解,以为是声明char类型变量,其实是在声明地址变量,
    //*p0=*p1;//不能运行 *p0标识字符串"world"的第一个字符所在的存储单元,但这个存储单元位于程序控制区,不能被赋值,只能读取
    //&a1=3;//不能运行 ,因为 &a1 这个标识符代表数字2 ; 2不是变量盒子,所以不能被赋值,只能被读取
    char s0[10]="123456";//这个声明的意思是,首先分配10个字符的存储单元(这十个存储单元统称为数组),然后利用"123456"这个字符串,给每个存储单元顺序赋值,所以此句声明的不是字符串,声明的是数组
    char s1[20]="abcdefghijk"; 
    *s1 =*s0;//可以运行  注意:*s0中的*不是运算符,在这里是标识符 ,*s0标识字符串"123456"的第一个字符所在的变量盒子,在这里被读取值"1",*s1标识字符串"abcdefghijk"的第一个字符所在的变量盒子,在这里被赋值
    p0=&a1;//可以运行
    *s1= s0[0];//可以运行
   // s0 =&a1;//不能运行,s0不代表变量盒子,s0是标识符,代表数组第一个元素的地址数值,s0[0]才代表该数组第一个元素所在的变量盒子
   s0[0]=a1;//可以运行 a1作为变量盒子,被读出'2'这个字符, s0[0]是个标识符,标识字符串"123456"的第一个字符所在的变量盒子,因此可以被赋值
}

后记:学习离不开上网查阅资料记录笔记,为方便记录网页资料记录笔记,本人为chrominmu类浏览器如chrome、edge等开发了个名为网风笔记的扩展插件,可方便帮助采撷记录网页的文章、段落、图片、多媒体等,并提供文章管理后台以方便整理收藏。特别是针对某sdn,某网页图书馆等限制复制的网页有良好的辅助作用。除此之外,网风笔记还有音视频下载、截图涂鸦、一键提取文章、自由点选段落、快捷打印成A4格式文档、网页笔记编辑整理、定向发布等等功能,可以说是喜欢网上学习采集资料的好帮手,现免费提供给大家使用。喜欢的朋友可自行百度搜索下网风笔记安装使用。

标签:总结,char,原创,语言,s0,a1,盒子,标识符,变量
From: https://www.cnblogs.com/eminer/p/16816284.html

相关文章

  • 对于文件的相关基础操作的学习与总结
    String类在读写文件时,最不能忽略的是String数据类型的使用,那就先来说明一下String类型吧!1、charAt();2、compareTo();3、length();4、split();指定分割的份......
  • C语言网络接口函数inet_ntoa用法小坑与分析
    tags:CNetworkDebug问题今天看了一下网络编程,发现其中有一个接口函数很有意思,就是从二进制转换到点分十进制表示的IP地址的函数​​inet_ntoa()​​,直接使用倒是......
  • 熟悉编程语言
    语言前50排名:分类:命令式面向过程C语言、COBOL语言面向对象Python、C、C++、Java、Per、Fortran、PHP等 声明式函数式lisp、hashshell、erlang、Scal......
  • Go常见错误总结1:'test' redeclared in this package
    Go常见错误总结1:'test'redeclaredinthispackage问题:'test'redeclaredinthispackage产生原因:变量名或方法名重名问题导致的,你这个变量和其他.go文件里面方......
  • vue中工作总结
    1.vue中数据向下传递时,无法使用@close方法清除原因:传递的时候需要进行一波深拷贝方法:JSON.parse(JSON.stringify(obj))2.表格选择的时候无法再次点击取消使用elementui的时......
  • 最短路个人总结
    最短路(一)DijkstraDijkstra算法可求任一点到定点的最短路,适于有向图和无向图(对有向图有用的就一定对无向图有用),其边权不可为负(一条边都不行)。数组vis标记访问过的点,数组di......
  • C语言实现vector结构
    C语言实现vector结构 1.使用说明本例vector结构以单链表方式实现,结合了stack与queue结构:pop_front+push_front使用方式为stack;pop_front+push_back使用方式是queue。......
  • R语言ECM误差修正模型、均衡修正模型、受限VECM、协整检验、单位根检验即期利率市场数
    全文下载:http://tecdat.cn/?p=29221全文出处:拓端数据部落公众号 传统上,协整的测试是在非常长的时间内进行的,本案例研究A测试了1960-2010年期间T-Bill利率和国债收益率......
  • 检测异常值的4种方法和R语言时间序列分解异常检测
    全文链接:http://tecdat.cn/?p=3232 原文出处:拓端数据部落公众号检测异常值的4种方法和R语言时间序列分解异常检测什么是异常值?异常值是与其他观测值有显著差异的数......
  • 【视频】逆变换抽样将数据标准化和R语言结构化转换:BOX-COX、凸规则变换方法
    全文链接:http://tecdat.cn/?p=22251 原文出处:拓端数据部落公众号归一化数据是数据科学中的一项常见任务。有时它可以让我们加快梯度下降的速度或提高模型的准确性,在某......