c语言学习随笔

  c语言是一门语言,拥有语言的共性,当我们学习外语的时候了解其思维习惯外加一些基础知识就可以很快掌握,学习这门语言的时候同样我们需要了解它的基本知识和它的整个思维。那么下面先介绍一下我目前学习的基本知识。

  1、基本数据类型:

     c语言的基本数据类型分为:字符型(char),整形(short, int, long), 浮点型(float, double) 

其中字符型和整形还分为带符号的和不带符号的,默认情况下都是带符号的,如果使用unsigned则说明不带符号的,如果是带符号的,那么最高位将表示符号位,最高位为0表示为正数,最高位为1表示为负数。

类型

字节数 

范围

类型

字节数 

范围

signedchar

-128——127

unsigned char

0——255

(signed) short

 2

-32768——32767

unsigned short

0——65535

(signed ) int

2/4 

-32768——32767

unsigned short

2/4 

0——65535

(signed) long

-2147483648——2147483647

unsigend long

4/8 

0——4294967295

float

-3.4*10-38——3.4*1038

double

-1.7*10-308——1.7*10308

在使用的时候要注意其范围,避免超出范围输出错误的运行结果,固定义变量的数据类型蛮重要的。

2、 数组

   1)一维数组

   数组是用来存储一组数据的构造数据类型。其定义时确定数组中元素的数据类型。即:每个数组只存放一种数据类型。

      数组的定义格式: 类型 数组名[元素个数];

  例如:int num[4];

       在定义的时候尽量初始化

     (1) Int num[5]={17,18,19,20,21};//一般写法

(2) Int num[5]={17,18};//只对前两个元素赋值

(3) Int num[5]={[3]=10,[4]=11};//对指定的元素赋值,这里为第三个和第四个

(4) Int num[]={11,12,13}.//正确,右边的元素确定,则个数可以省略这里为3个。

(5) Int num[];//错误,编译器无法知道应该分配多少的存储空间

(6) Int num[5];num={17,18,19,20,21};//错误,只能在定义数组时这样进行初始化

(7) Int num[‘A’]={1,2,3};//正确,相当于是ages[65]

(8) Int count=5;int num[count];//如果不进行初始化,则这种写法正确,编译器不会报错为其分配20个字节的存储空间。

(9)而int count=5;int num[count]={1,2,3,4,5};//这种写法是错误的,在定义数组时对数组进行初始化,元素的个数必须为常量或者不写,不能是一个变量

  与数组有关的一些操作:

可以使用sizeof运算符来计算数组元素的个数

     int count=sizeof(num)/sizeof(int); //数组的总长度除以单个的长度等于元素个数

     可以使用malloc()分配内存,同时分配使用之后要将其释放(free)。 

        数组内存存储细节

假设有数组:int num[5]={1,2,3,4,5};

数组名即代表数组的地址,数组的地址==数组名(num)==数组的首元素的地址&num[0]在内存中,内存从大到小进行寻址,为数组分配了存储空间后,数组的元素自然的从上往下排列存储,整个数组的地址为首元素的地址。

     2)二维数组

Int ages1[3][10];//数组能够存放3个数组,每个数组存放10个数值,共3x10=30个述职数值。二维数组和一维数组可以进行转换。

3、字符串操作(n整数代表指定长度)

char *strcpy(char *destin, char *source); 复制字符串  

strncpy(char *destin, char *source, n) 复制指定长度字符串(比上面的那个安全) 

strcat(char *destin, char *source) 附加字符串  

strncat(char *destin, char *source, n) 附加指定长度字符串 (比上面的那个安全)

strlen(p) 取字符串长度 

strcmp(char *str1, char *str2) 比较字符串  

strncmp(char *str1, char *str2, n) 比较指定长度字符串 (比上面的那个安全)

trcasecmp忽略大小写比较字符串 

strchr(char *str, char c) 在字符串中查找指定字符 

strrchr(char *str, char c) 在字符串中反向查找 

strstr(char *destin, char *source) 查找字符串  

strpbrk(char *destin, char *source) 以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素 

strspn(char *destin, char *source) 以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移  

strcspn(char *destin, char *source) 以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移   

2)字符串到数值类型的转换  

atoi(p) 字符串转换到 int 整型  

atof(p) 字符串转换到 double 符点数 

atol(p) 字符串转换到 long 整型  

4、库函数

  标准头文件包括:

<asset.h>      <ctype.h>       <errno.h>       <float.h>  

<limits.h>      <locale.h>       <math.h>        <setjmp.h> 

<signal.h>     <stdarg.h>      <stddef.h>      <stdlib.h>

<stdio.h>      <string.h>        <time.h>

这些头文件中包含了不少的库函数(已经编译、封装好的一些函数),这些是我们实现一些功能需要用到的基本函数(函数调用)。

 5、运算操作    

     基本的优先级需要记住:

     指针最优,单目运算优于双目运算。如正负号。

     先乘除,后加减。

     算术运算,后移位运算,最后位运算。注:括号会打破优先级顺序。

   运算符优先级:

优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[]
数组下标
数组名[整型表达式]
左到右
 
()
圆括号
(表达式)/函数名(形参表)
 
.
成员选择(对象)
对象.成员名
 
->
成员选择(指针)
对象指针->成员名
 
2
-
负号运算符
-表达式
右到左
单目运算符
(类型)
强制类型转换
(数据类型)表达式
 
++
自增运算符
++变量名/变量名++
单目运算符
--
自减运算符
--变量名/变量名--
单目运算符
*
取值运算符
*指针表达式
单目运算符
&
取地址运算符
&左值表达式
单目运算符
!
逻辑非运算符
!表达式
单目运算符
~
按位取反运算符
~表达式
单目运算符
sizeof
长度运算符
sizeof 表达式/sizeof(类型)
 
3
/
表达式/表达式
左到右
双目运算符
*
表达式*表达式
双目运算符
%
余数(取模)
整型表达式%整型表达式
双目运算符
4
+
表达式+表达式
左到右
双目运算符
-
表达式-表达式
双目运算符
5
<<
左移
表达式<<表达式
左到右
双目运算符
>>
右移
表达式>>表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式<表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!=
不等于
表达式!= 表达式
双目运算符
8
&
按位与
整型表达式&整型表达式
左到右
双目运算符
9
^
按位异或
整型表达式^整型表达式
左到右
双目运算符
10
|
按位或
整型表达式|整型表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?:
条件运算符
表达式1? 表达式2: 表达式3
右到左
三目运算符
14
=
赋值运算符
变量=表达式
右到左
 
/=
除后赋值
变量/=表达式
 
*=
乘后赋值
变量*=表达式
 
%=
取模后赋值
变量%=表达式
 
+=
加后赋值
变量+=表达式
 
-=
减后赋值
变量-=表达式
 
<<=
左移后赋值
变量<<=表达式
 
>>=
右移后赋值
变量>>=表达式
 
&=
按位与后赋值
变量&=表达式
 
^=
按位异或后赋值
变量^=表达式
 
|=
按位或后赋值
变量|=表达式
 
15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺序运算

 

 6、指针

     指针是C提供的一种非常强大的数据类型,它使C既能深入硬件层与汇编甚至机器语言直接交互,指针指向内存地址。
指针的用途广泛,C/C++中很多数据类型都是内建的指针类型,比如数组名、函数名都是指针。
    (1)指针一般比使用变量名速度快;
    (2)指针用于大型数据类型(比如结构体、类)来避免这些数据对象在函数调用中的复制,加快程序执行速度;
    (3)指针用于函数引用,实现向其他函数传递函数或者从其他函数返回函数,近一步在C中实现泛型编程;
    (4)指针可用于实现那些代码极其简洁,运行效率高而难以理解的操作

    指针使用的时候一定要初始化,但是指针使用的时候也存在一些缺陷,在函数调用的时候进行指针传递时注意空指针的出现。

  c语言中函数是由语句组成,熟悉一些语句,明白一些变量我们就掌握了c语言了,但是最难的就是熟悉变量。c语言中我们最常见的循环语句是:for,do while,while。常见的选择语句if  else ,switch。这也是经常用到的。

   函数调用的执行就是运算到调用的函数处将调用的函数执行完才会执行调用函数语句下面的语句。

转载于:https://www.cnblogs.com/osn-21zj/p/4684511.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值