C语言基础知识备忘

c语言指针基础一 指针指向的内存区域中的数据称为指针的目标,如果指针指向的目标区域是程序中的一个变量的内存空间,则这个变量称为指针的目标变量,简称为指针的目标。指针运算是指以指针变量所存放的地址量作为运算量而进行的运算,指针运算的实质就是地址运算,指针运算只能进行赋值运算,算数运算,和关系运算。指针向高地址方向移动一个数据单(char移动1字节,int移动4字节),指针的指向发生变化; 阅读详情

C语言基础知识备忘

常量

整型常量(Integer)

整形常量的表示形式
整型常量的表示形式特点举例
十进制0-9的数字序列组成,数字前可带正负号256,-128,0,+7
八进制0开头,后跟0-7的数字序列组成,0前可带正负号021,-017
十六进制0x开头,后跟0-9,a-f的数字序列组成0x12,-0x1F
整型常量的类型
  • 长整形:l,如:-256L,1024l
  • 无符号整形:u,如:30u,256U,
    不能表示成小于0的数,如-30u非法
  • 无符号长整形:lu,30lu

实型常量(Float)

指数形式

0.345e-5=0.00000345

实型常量的类型
  • 实型常量隐含按双精度型(double)
  • 单精度:f
  • 长双精度(long double):l

字符常量

转义字符
字符含义
\n换行(new line)
\r回车(不换行)(carriage return)
\0空字符,代表ASCII码值为0的字符
\t水平制表(horizontal tabulation)
\b退格(backspace)
\"双引号(double quotation mark)
\'单引号(single quotation mark)
\\反斜线(backslash)
\?问号

变量

局部变量

  • 局部变量定义时不会自动初始化,若未赋初值,则取随机值

全局变量

*全局变量定义时未赋初值则初始化为0

静态变量

  • 静态变量会保持上一次的值
  • 若未赋初值,则初始化为0

const类型修饰符

  • const常量只能在定义时赋初值,不能再程序中改变其值。

char类型与int类型的关系

  • char型可看作一种特殊的int型。
  • 在C语言中,只要在ASCII码取值范围内,char型数据和int型数据可以相互转换,即char型数据可以参与任何int型数据的运算
    例:
    一个char型变量既可以以字符格式输出,也可以以整形格式输出,以整形格式输出即输出其ASCII码的十进制值。
char ch='a';
printf("%c,%d\n",ch,ch);

-->a,97

变量Tips

  • char型数据在内存中只占1个字节
    int型与程序执行环境的字长有关。16位下占16位,即2个字节;32位下占32位,即4个字节。
    可以使用sizeof计算类型的字节数
  • 对于实数,无论是小数表示形式还是指数表示形式,在计算机内部都是采用浮点数方式来存储。
  • *

运算符

算术运算符

  • 两个整数相除的结果仍为整数,舍去小数部分的值。
  • 整数与实数原酸的结果为double
  • 求余运算限定参与运算的两个操作数为整数。余数的符号与被除数的符号相同。

常用的标准数学函数

函数名功能
sqrt(x)计算平方根
fabs(x)计算绝对值
log(x)计算lnX的值
log10(x)计算lgX的值
exp(x)计算e^x的值
pow(x,y)计算x^y的值

赋值运算符

  • =左侧只能是变量名

位运算符

  • 位运算符的操作对象只能是charint类型
  • &:按位与,一种对某位清零的手段,即两个操作数中任意一位为0,则结果置0
  • |:按位或,一种对某位置1的手段,即两个操作数中任意一位为1,则置1
  • ^:按位异或,两个操作数位不同,则置1
  • <<:左移位,每左移一位相当于乘2
  • >>:右移位,每右移一位相当于除2

类型转换

赋值中的类型转换

  • C语言支持类型自动转换机制

表达式中的类型转换

  • 表达式中若混有不同类型的常量及变量,则先要全部转换为同一类型,再进行运算。
  • 类型提升(Type Promotion):把所有操作数都转换成占内存字节数最大的操作数类型。

输入/输出

printf()

  • 格式转换符
格式转换符用法
%d带符号的十进制整数
%u无符号的十进制整数
%o无符号的八进制整数,不输出前导符0
%x无符号的十六进制整数(小写),不输出前导符0x
%c输出一个字符
%s输出字符串
%%百分号%

* 格式修饰符

格式修饰符用法
英文字母l输出long型数据
最小域宽m指定输出项输出时所占的列数。若m为正整数,向右靠齐。若m为负整数,向左靠齐。
显示精度.n对于浮点数,指定输出的浮点数的小数位数。对于字符串,指定输出截取的子串字符个数

scanf()

  • 格式转换符
格式转换符用法
%d十进制整数
%o八进制整数
%x十六进制整数
%c字符,空白字符(空格、回车、制表符)也作为有效输入
%s字符串,遇到第一个空白字符输入结束
%f实数
%%百分号

* 格式修饰符

格式修饰符用法
忽略输入修饰符*表示对应的输入项在读入后不赋给相应的变量
域宽m指定输入的数据的宽度,按此宽度截取所需数据

函数

  • 宏是预处理阶段替换,函数是运行时调用。

数组

  • 定义数组的大小必须使用整型常量或整型常量表达式。
    int score[100]合法,而int score[n]非法
  • C语言的数组在内存中是按行存放的。
  • 数组名代表数组的首地址
  • 数组不能整体引用,每次只能引用数组的一个元素
  • 不能用赋值表达式对数组元素进行整体赋值。如score={1,2,3,4,5};非法

数组的初始化

  • 引用数组前,必须保证数组的元素被赋以确定的
  • 二维数组,既可以按元素初始化,也可以按行初始化
    如:int matrix[3][2]={(1,2,3,4),{5,6,7,8}};//按行初始化
    int matrix[3][2]={1,2,3,4,5,6,7,8};//按元素初始化
  • 当初始化列表中提供的初值个数少于数组元素个数时,自动给后面的元素赋值为0
int matrix[1][2]={0};
等价于
int matrix[1][2]={0,0};
  • 当数组被声明为static(静态)类型或外部存储类型(即在所有函数外部定义时),则在不显式给出初值的情况下,数组元素将在程序编译阶段自动初始化为0。

向函数传递一维数组

  • 可以用数组名作为函数参数
  • 在接收一维数组的函数中,在声明一维数组的形参时,可以省略数组的长度
    如:
void sort(int arr[10]);
等价于
void sort(int arr[]);

向函数传递二维数组

  • 在接收二维数组的函数中,在声明二维数组形参时,不能省略数组第二维的长度。
    如:
void func(int arr[4][3]);
void func(int arr[][3]);
都合法,但
void func(int arr[][]);
非法

字符数组

字符数组与字符串关系
  • 字符串由若干有效字符及字符'\0'作为结束标志的一个字符序列。
  • 字符串借助字符型一维数组存储。
  • 最后一个'\0'占用一字节的存储单元,但是不计入字符串的实际长度。
  • 每个字符串在内存中占用一串连续的存储空间,而且这段连续的存储空间有唯一的首地址。
  • 如果一个字符串只是字符串常量,则这个字符串常量本身代表的是该字符串在内存中所占连续存储空间的首地址,是一个地址常量
  • 一维字符数组可存放一个字符串,二维字符数组可存放多个字符串。
字符串赋值给字符数组
1.用char数据对数组初始化

char str[6]={'C','h','i','n','a','\0'};
此种方式赋初值,必须人为的加入'\0'

2.用字符串常量对数组初始化

char str[]="China";
* 对于二维字符数组存放多个字符串,第二维的长度不能省略,应该按最长的字符串长度设定。
char weekday[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

字符数组的输入/输出
1.以c格式字符一个个单独输入/输出
for(i=0;i<10;i++){
    scanf("%c",&str[i]);
}
for(i=0;str[i]!='\0';i++){
    printf("%c",str[i]);
}
2.以s格式作为字符串整体输入/输出
scanf("%s",str);
printf("%s",str);

【注】
spaceentertab作为以%s格式输入字符串的分隔符,因而不能被读入,遇到这些字符即结束输入。

3.用gets()或puts()输出/输出
  • gets()从键盘读入一个字符串(包括空格符)
  • puts()输出一个字符串,当遇见第一个'\0'时输出结果,并自动输出一个换行符
字符串处理函数
  • 需要#include

指针

  • 指针:是一种特殊的数据类型,只存放地址型数据
  • 直接寻址:按变量名来存取变量内容的访问方式
  • 间接寻址:通过指针变量间接存取指向的变量的访问方式

指针Tips

  • a=*p++;,其中++*优先级相同,且是右结合的。
    相当于a=*(p++);,而++又位于变量p之后,即相当于
a=*p;
p=p+1;
  • a=(*p)++相当于
a=*p;
*p=*p+1;

字符指针

字符指针与字符数组的区别
1. 初始化含义不同
  • char str[10]="China";
    表示定义一个字符数组str,数组名str代表字符串"China"在内存中存放的首地址。
  • char *ptr="China";
    表示定义一个字符指针ptr,并在定义时用字符串"China"在内存中的首地址为指针变量ptr赋初值。
2. 赋值方法和含义不同。
  • 指针赋值
char *ptr;
ptr="China";        //正确

字符串中的一个字符的地址赋给ptr,相当于用地址值对ptr赋初值。
* 字符数组赋值

char str[10];
str="China";//错误

以上方法是错误的,数组名是数组元素的首地址,是一个常量值,无法被改变。
将一个字符串赋值给字符数组必须使用strcpy
strcpy(str,"China");

3. 输入方式不同
  • 字符数组输入
char str[10];
scanf("%s",str);
  • 字符指针
    必须保证字符指针事先已经指向一个数组的首地址
char *ptr,str[10];
ptr=str;
scanf("%s",ptr);

4.类型不同
* 字符数组的数组名是一个地址常量,值不能改变
* 字符指针是一个变量,值可以被改变

【注】
由于数组名作函数形参与指针变量作函数形参的等价性。因此,在用数组名作函数形参的函数体内部可以对该声明为形参的数组名进行和指针一样的自增、自减运算。除此之外的数组名都是一个指针常量,不能进行自增、自减的运算。

C语言数据存储——字节、地址、端序 文章目录高低字节操作数截断高低地址大小端序内存中使用小端序存储 高低字节 高低字节与内存中的置无关,描述的是数据中字节的权。例如 int a = 0x00000159; 01 这个字节为高字节,59这个字节为低字节,原因是01所处的置权较大,而59所处置的权较小。 简言之,字节从左到右,从高到低 操作数截断 当把字节多的类型数据赋给一个占字节较少的变量时,会发生截断 就是只保留所能保留的原数据的低字节 如 将int(4字节) 赋给char(1字节),那么数据就只会截断最后的1个字节,高字节舍去。 阅读详情

相关推荐

备忘录(C语言实现)

这是一个C语言的课程设计,帮学妹做的,做得比较简陋,能应付一下检查啦,其中memo_sum.dat用于记录信息的条数,memo.dat用于记录信息的内容,核心点的东西就是C语言的关于文件操作的知识,这次是仿照之前做得那个“航空订票系统”做得,简化版。

C语言进阶——地址和指针

声明二级指针变量的语法数据类型 **变量名数据类型是指二级指针指向的数据的数据类型。双星号(**)是说明符,用于告诉计算机,该变量是二级指针变量。变量名就是二级指针变量的名称,并要符合标识符的命名规则给二级指针变量赋值与给一级指针变量赋值的方式是一样的二级指针变量的基类型由数据类型与双星号( ** )组成。其中双星号 ( ** )表示二级指针变量会通过地址间接跳转两次,然后根据数据类型的长度确定指针访问的数据最终置。

ld15353133609的博客 1万+

C语言、字节、字之间的关系

1. 是计算机存储的最小单,简记为b,也称为比特(bit),每一的状态只能是0或1。 2.字节 字节,英文Byte,是计算机用于计量存储容量的一种计量单;8个二进制构成1个"字节(Byte)",它是存储空间的基本计量单。1个字节可以储存1个英文字母或者半个汉字,换句话说,1个汉字占据2个字节的存储空间。 3.字 字是表示计算机自然数据单的术语,在某个特定计算机中,字是其用来一次性处理事务的一个固定长度的(bit)组;例如一台8机,它的1个字就等于1个字节,字长为8。如果是一台16

MQ0522的博客 7535

4月从零学习C语言(第17天)——取地址运算

在C语言程序中我们的变量是存放在内存当中的,我们可以把内存看作一座公寓楼,那么想知道我们的变量住在这栋楼里的哪一户就需要知道它的门牌号也就是地址。

qq_46133833的博客 1912

C语言基础知识备忘

scanf可以根据不同格式符,在缓冲区拿取不同数据,遇到空格结束,回车确认,对这个回车确认符并不进行处理,回车符会留在输入缓存区中。因此,在下一个读“字符”操作函数(getchar, scanf("%c"), gets()等)运行时,会读到这个字符(%d会忽略任何空白字符(空格、回车、制表符等)忽略是从缓冲区里删除,但并不保存)(%s一直找到\0结束,否则有可能出现段错误或乱码)。

2203_76059817的博客 1011

C语言指针操作、内存操作、字符串函数之备忘录(更新中~)

常用java开发Android的application,一到sourceinsight去写C程序,经常会忘记一些C语言的基础知识,特作此备忘录,谨记之。 1、指针: 在计算机中,所有数据都存放在计算机的内存中,也就是说每个变量都对应着一个地址,而这个地址“指向”该变量,因此一个变量的地址称为该变量的“指针”,用语存放地址的变量 称为指针变量。 指针变量和一般变量概念差不多,指针变量也是存放...

java开发指南博客 【转载】 116

Java设计模式-备忘录模式

Java设计模式之一的备忘录模式。备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原

m0_62946761的博客 3293

【C语言】一文掌握 C 语言用法(C 备忘清单)

宏描述__DATE__当前日期,一个以 “MMM DD YYYY” 格式表示的字符常量__TIME__当前时间,一个以 “HH:MM:SS” 格式表示的字符常量__FILE__这会包含当前文件名,一个字符串常量__LINE__这会包含当前行号,一个十进制常量__STDC__当编译器以ANSI标准编译时,则定义为1ANSI C定义了许多宏,您可以使用这些宏,但是不能直接修改这些预定义的宏");return 0;函数由两部分组成。

数据知道的博客 1万+

此“备忘录”和彼备忘录一样吗?

行为型模式之备忘录模式

奔走的王木木Sir的博客 1595

备忘录(C语言

#include#include#includestruct memo{ char name[50]; char event_date[20]; char content[500]; char remind_date[20];};void input_memo();void look_over_memo();void modify_by_name()

1563

【C语言 日历备忘录之彩蛋游戏】

来自小小怪的C语言,小白一枚。代码的未知错误可能还存在,谢谢各集美来找错误!我们都知道,C语言需要很多第三方库,但是安装起来非常麻烦。windows和macOS的库有很多区别。所以一些第三方库macOS不能用,Xcode编译器也不能安装一些库。小小怪我是Mac,所以写这篇C作业的时候避免了很多C的第三方库,需要下载的第三方库一个都没有。没有需要下载的库使我非常容易,但是呢?代码的效果看起来不太完美。 ...

qq_63099306的博客 674

设计模式——备忘录模式

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。【2】现实生活中备忘录是用来记录某些要去做的事情,或者是记录已经达成共同意见的事情,以防忘记。而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作。【3】备忘录模式属于行为型模式。【4】实现了信息的封装,使得用户不需要关心状态和保存细节。符合 “单一职责原则”。

程序猿进阶 1676

C 编程备忘

C编程语言是由Dennis Ritchie在1972年在美国的AT&T(美国电话和电报)的贝尔实验室开发的。

qq_37168427的博客 878

日历加备忘

#include "stdio.h" typedef struct da    //定义备忘的结构 {  char dat[20];  char beiwang[100];  struct da *next; }TT; void putoutclause(void);   //函数声明 void scanclause(void); long int f(int year,int

Jesse的专栏 1万+

iMazing如何导出备忘录以及恢复iTunes备份的备忘

想要iPhone备忘录导出到Windows电脑,能不能有什么办法将iPhone手机里面的备忘录导出成PDF或者WORD文档的方式保存到电脑上,以方便打印呢?小编推荐大家可以使用iMazing。使用这款软件,您可以一次性将备忘录里面的内容(包括附件中的照片)一次性全部导出为PDF以及文本、或者直接打印出来。下面,小编将为大家详细介绍如何将iPhone手机中备忘录内容制作为PDF文档。 如何将苹果手机备忘录导出为PDF或文本 步骤1:下载并安装软件包在您的电脑上。软件分为Mac苹果电脑版本和Windows电脑

Lei_xu1的博客 2028

设计模式之备忘录模式(C++)

介绍设计模式之备忘录模式

翟天保的博客 1万+

1-C语言相关知识备忘、整理

C语言相关知识备忘、整理

m0_55012235的博客 98

C语言设计模式:备忘

备忘录模式主要目的用于支持undo操作。 考虑到C是一种结构化语言,撤销操作往往在每个返回处理进行回滚,或者通过goto出口统一释放资源。 如果将回滚操作对象化,即勉强可看为该模式的一种实现。 void func()  {       ret = do_sth1() & rollback_reg(sth1);      if (ok != ret) {

如是我闻 732
上一篇: Vim简明教程
下一篇: 机器学习入门:线性回归及梯度下降
tiweeny
博客等级 码龄9年 59粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值