初识C语言--2(函数、数组、操作符:算数-移位-位-赋值-单目-关系-逻辑-条件、关键字:typedef-static-register、define常量和宏、指针、结构体)

函数初识

Add(int x, int y)
{
    int sum = 0;
    sum = x + y;
    return sum;
}
 
int main()
{
    int a = 0;
    int b = 0;
    int s = 0;
    scanf("%d,%d", &a, &b);
    s = Add(a, b);
    printf("%d", s);
    return 0;
 
 
}

 数组

    int arr[5] = { 1,2,3,4,5 };
    int arr1[10] = { 1,2,3,4,5 };//不完全初始化,其他元素默认为0

创建数组时不能为变量
数组的调用

下标访问

int main()
{
    int arr[5] = { 1,2,3,4,5 };
    int arr1[10] = { 1,2,3,4,5 };//不完全初始化,其他元素默认为0
 
    int b = 0;
 
    while (b <= 9)
    {
        printf("%d\n", arr1[b]);
        b++;
    }
 
 
    return 0;
 
}

/*字符串数组

int main()
{
    int arr[5] = { 1,2,3,4,5 };
    int arr1[10] = { 1,2,3,4,5 };//不完全初始化,其他元素默认为0
    char strs[4][6] = { "hello", "world", "c", "java" };
    int b = 0;

    while (b <= 3)
    {
        printf("%s\n", strs[b]);
        b++;
    }


    return 0;

}

*/

 

操作符

算数操作符

+ - *

/  (除数 被除数都是整数 结果会是整数 有一个是小数结果才会是小数)

%(取余)两端必须是整数

移位操作符

<<左移操作符(移动的是二进制位)

>>

int main()
{
    int a = 2;
    int b = a << 2;
    printf("%d", b);//8
    return 0;
}

//00000000000000000000000000000010

//00000000000000000000000000001000

 位操作符

&按位与

|按位或

^按位异或

赋值操作符

=:赋值     

+=:a += 3 ----a=a+3              -=:a -= 3 ----a=a-3       以下同理    

   *=  /=  &=  ^=  \=  %=  >>=  <<=

单目操作符-只有一个操作数

双目操作符(例如+: a+b有两个操作数)

!                //逻辑反操作   0表示假,非零表示真   if(!a)如果a为假
-                //负值
+                //正值
&                //取地址
sizeof           //求操作数的类型长度(以字节为单位)

int main()
{
    int a = 9;
    printf("%d", sizeof a);//4        不报错说明size of 不用加括号  不是函数
    return 0;
}

int main()
{
    int arr[5] = { 1,2,3,4,5 };
    printf("%d\n", sizeof(arr));//数组的大小是数组内元素的总和                 4*5=20
    printf("%d", sizeof(arr) / sizeof(arr[0]));//c语言计算数组元素个数方式     5
    return 0;

}

~                //对一个数的二进制按位取反----把所有二进制位数字1变成0,0变成1 符号位也变
--               //前置、后置减减
++               //前置、后置加加        

前置++ 先++ 再使用     b=++a   先++即a=a+1 ,再赋值给b    得a=11,b=11          --同理

后置++ 先使用 再++     b=a++   先把a的值赋给b,即b=a  ,然后再++即a=a+1    得b=10 a=11

*                //间接访问操作符(解引用操作 符)
(强制类型转换)    //强制类型转换

关系操作符

>  >==  <  !=  == 

!=操作符用于测试“不相等”,而==操作符用于测试“相等”

逻辑操作符

&&(逻辑与)

||(逻辑或)

条件操作符(三目操作符)

表达式1?表达式2:表达式3

1成立 整个表达式的结果是2

1不成立 整个表达式的结果是3

逗号表达式

逗号隔开的一串表达式

从左到右依次计算

整个表达式的结果是最后一个表达式的结果

int main()
{
    int a = (1 + 5, 69 + 4, 8 + 2);
    printf("%d", a);      为10
    return 0;

下标引用、函数调用:[ ],( )

变量的命名必须是数字、字母、下划线组成

不能有特殊字符、同时不能有数字开头 

常见关键字

1.c语言提供的,不能自己创建关键字

2.不能做变量名字

 auto 是自动的 每一个局部变量都是auto修饰的 

    int a = 0;//等价于auto int a,auto一般省略了

signed有符号的  unsign无符号的 

void 无/空   不需要任何返回

difine  include不是关键字  是预处理指令

typedef 类型重定义

typedef unsigned int u_int;        //把 unsigned int 重命名位 u_int
int main()
{
    unsigned int a = 0;
    u_int b = 0;          //两个的创建方式是一样的
    return 0;
}

static 静态的

1.static修饰局部变量

出局部范围不销毁,并不会重新创建,如下例子a不会重新创建等于0,而保持a++后的值

本质上改变变量的存储类型

void test()//void的意思就是无,它修饰的函数没有返回值
{
    static int w = 0;//static修饰的局部变量出范围不会被销毁
    w++;
    printf("%d", w);
 
}
 
int main()
{
    int n = 0;
    while (n < 5)
    {
        test();
        n++;
    }
    return 0;

----内存组成 

 

2.static修饰全局变量

全局变量在整个工程中都可以使用

static修饰全局变量,使得这个全局变量只能在自己所在的源文件中使用

全局变量,在其他源文件中可以使用,是因为全局变量有外部链接属性

但是被static修饰之后,就变成了内部链接属性

 3.static修饰函数

static修饰函数,使得函数只能在自己所在的源文件内部,不能在其他源文件中使用

本质:将函数外部链接属性变为内部链接属性

register寄存器关键字 

计算器数据存储到哪里

寄存器(集成到cpu上)         速度快   存储量小

高速缓存     速度中  中

硬盘            速度慢 大

register int b = 0;//建议b的值存储在寄存器中

cpu计算 从内存中拿

cpu越来越快   内存传输跟不上

cpu先去寄存器,再高速缓存,再硬盘

大量使用的数据,推荐放到寄存器中

 

define常量和宏

define定义常量

#define shi 5

#define 常量名 常量值

define定义宏-有参数

#define Add(x,y) ((x)+(y))
 
int main()
{
    printf("%d", 3 * Add(5, 4));
    return 0;
}

指针(初识)

内存

内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行

每个内存单元是1字节

 32位机器 32根地址线  通电 1/0  2的32次方种序列  都可以作为内存的编号

当这个二进制序列成为内存编号时,我们把其成为内存单元地址 

例:int a = 0;

a占4个字节  四个内存空间

 转化为16进制00 00 00 0a        ,两个数是一个字节


int main()
{
    int a = 0;
    printf("%p\n", &a);//百分号p专门用来打印地址
    int * p = &a;//p是用来存放地址的,c语言中叫做指针变量   *说明p是指针变量  int说明p执行的对象是int类型
    *p = 20;    //解引用操作,通过p里的地址找到所指的对象 ,*p就是p指向的对象,改变地址里的对象
    printf("%d\n", a);
    return 0;

char ch = 'w';

char * pc =&ch;char说明pc执行的对象是char类型 

地址也被称为指针,存放指针的变化称为指针变量

指针变量大小:指针需要多大空间,取决于地址的存储需要多大空间

 32位平台  32bit    4字节

64位平台  64bit    8字节

初识结构体

 结构体可以让c语言创建新的类型出来

结构体创建,初始化和调用

struct Book//结构体
{
    char name[10];//字符数组
    float price;   //成员变量
    int page;
};

void print(struct Book* bk)
{
    printf("%s %lf %d\n", (*bk).name, (*bk).price, (*bk).page);//解引用

    printf("%s %lf %d\n", bk->name, bk->price, bk->page);//指针
}

int main()
{
    struct Book book = { "c语言",56.23,56565 };//结构体创建与初始化

    printf("%s %lf %d\n", book.name, book.price, book.page);//结构体.成员变量    成员变量的调用
    print(&book);   //函数
    return 0;
}

->箭头操作符 

结构体指针->成员变量名

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值