[C语言]C语言基础学习第二篇:C入门(2p)

前言

  • 博主说明

终于放寒假了,回到家里感觉还蛮不错的,但是整个寒假里需要大量的时间去学习去弯道超车,每天做好时间管理,以最高的效率来按照计划一个个完成。

接下来的更新将会非常的快因为,我c语言视频都看函数递归了,我博客上还是第一期。虽然我感觉也没有多少真人来看我的c语言基础的博客。不过我会继续努力的,不只是C语言,我会把所有关于计算机上的学习和感悟写成博客记录下来。

 字符串和转移字符

字符串就是一串字符,那么C语言是怎么描述字符串的呢?

int main()
{
    "yamada"
    //字符数组
    char arr[] = "hello";
    return 0;
}

我们怎么观察出字符串是由一串字符组成的呢。我们可以通过监视窗口进行查看。

监视

第一步

我们先在我们的代码的开始和结尾处打两个断点,操作如上,用来表示我们调试监视的时候的范围。

第二步

按下ctrl+f10就会进行调试出现上面的窗口。

第三步

我们在上面调试一栏里按照步骤,看到有监视1,2,3,4。然后我们就随便选择一个。

第四步

我们就发现底下有监视这么一个窗口。我们按下ctrl+f11,我们就会发现黄色的箭头会一行一行执行,你按一次执行一行。我们在下方的监视窗口输入我们的数组arr,我们会发现他会有6个不同的值,分别为:’h‘,’e‘, ’l‘, ’l‘, ’o', '\0'。

说明字符串在结尾处隐藏了一个“\0”,来表示终止。

int main()
{
    char arr1[] = "abc";
    char arr2[] = {'a', 'b', 'c'};
    return 0;
}

可以看出如果是用大括号括起来,字符串的终止字符‘\0’就不存在了。

在这里我们也可以是用strlen整个函数来算字符串的长度。

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
int main()
{
	char arr[] = "hello";
	char arr1[] = { 'h', 'e', 'l', 'l', 'o' };
	char arr2[] = { 'h', 'e', 'l', 'l', 'o', '\0'};
	int len = strlen("abc");
	int len1 = strlen(arr);
	int len2 = strlen(arr1);
	int len3 = strlen(arr2);
	printf("%d\n", len);
	printf("%d\n", len1);
	printf("%d\n", len2);
	printf("%d\n", len3);
	return 0;
}

通过我们len,len1,len2,len3不同变量来对比我们可以发现len2所得到的结果是37,这实际上就是因为没有终止字符所以就会不终止,到37的位置(随机)。我们通过len3的对比我们就可以知道。当然我们使用strlen函数的时候要引用头文件<string.h>。

转义字符

假如我们要输入c:\test\test.c。

int main()
{
    printf("c:\test\test.c");
    return 0;
}

因为\t的组合的意思实际上是加上一个tab键,所以导致我们最终的结果和我们想的不一样。

同样的情况也会出现在”“ 和 ‘’。

int main()
{
    printf("%s\n", "a");
    printf("%s\n", """);
    printf("%s\n", "\"");    

    return 0;
}

当我们的”“里面包含了”,它就会自动认为是前面两个组成“”。发生错误,如果我们一定要输出“,我们就可以用\来讲后面的"进行转义,即将后面一个符号的作用取消掉。除你武器!!

所以我们就可以

int main()
{
    printf("c:\\test\\test.c");
    return 0;
}

int main()
{
    printf("%c\n", '\130' );
    return 0;
}

这里需要点数学知识。

我们的A对应的ASC码值是65,ASC码就是我们通过数字转化为各种符号,有点像我们的摩斯密码。按照顺序我们的X的ASC码值就是88。那么我们这里的130又是什么意思呢,就是代表着我们的8进制的数字,至于8进制怎么算,这个你在网上能找到所以我就不细说了。这里就相当于我们

”130“ 8进制换算成 10进制的数字就是”88“,我们前面的%c就是按照我们输入的asc码值大小转化出对应的符号。

我们可以看一下A是怎么转换的。

int main()
{
    printf("%c\n", '\101');
    return 0;
}

101转化为十进制就是65,那么对应的就是A。

释注

注释就是把我们不想要的代码注释掉,或者写注释来说明自己代码的意思。

 或者是

// 给你好果子吃 嗷!!!

选择语句和循环语句

int main()
{
    int input = 0;
    printf("来到我的世界吧");
    printf("那就来看雨色协议");
    scanf("%d", &input);
    if (input == 1)// 如果你输入1那么就会执行if语句底下的内容
        printf("成为名垂青史的原创动漫");
    else // 如果是输入的是其他的数字,那么就会执行else语句
        printf("shit!!!!");

    return 0;
}

当然了我们可以用{}来确定if,else内的语句。

if (1 == 1)
    {
        1;
        2;
        3;
    }

接下来我们学循环语句。

我们每天有重复的事情和决定发生。

int main()
{
    int line = 0;
    while(line < 3000)
    {
        printf("叫我爸爸的次数:%d\n", line);
        line++;

    }
    if(line == 3000)
    {
        printf("儿子真乖!!");
    }
    
    return 0;

}

while语句里面就是我们的条件,当一直满足条件(1),那么就会一直运行while里面的语句。

循环语句还有:for语句

初始函数和数组

函数

函数我们以 1 + 1 = 2来举例子。

int main()
{
    int num1 = 0;
    int num2 = 0;
    scanf("%d%d", &num1, &num2);
    int sum = num1 + num2;
    printf("%d", sum);


    return 0;
}

当我们用函数的概念。

int Add(int n, int m)
{
    int z = 0;
    z = n + m;
    return z;
}

int main()
{
    int num1 = 0;
    int num2 = 0;
    scanf("%d%d", &num1, &num2);
    int c = Add(num1, num2);
    printf("%d", c);
}

这里我们自己创建一个叫Add函数。()内是我们这个函数内要放入的参数,设置参数的时候也是要说明参数的类型和形参。

数组

int main()
{
    // int a = 1;
    // int b = 2;
    // int c = 3;
    // int d = 4;
    // int e = 5;
    // ....
    // 数组: 一组相同类型的元素的集合。
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    char ch[5] = {'a', 'b', 'c'}; // 不完整初始化,剩下的默认为0
    return 0; 
}

我们可以通过下标的方法来访问每个元素。

arr[0] -> 第一个元素

arr[1] -> 第二个元素

arr[2] -> 第三个元素

arr[3] -> 第四个元素

int main()
{
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int i = 0;
    while(i < 10)
    {
        printf("%d", arr[i]);
        i++;
    }
    return 0;
}

操作符

算术操作符:

+  -  *   /   

int main()
{
    int a =9/2;
    float b = 9/2;
    float c = 9/2.0;
    printf("%d\n", a);
    printf("%f\n", b);
    printf("%f\n", c);
    return 0;
}

移位操作符

<< >>

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

因为整形的大小是四个字节,每个字节是8个bite位,那么a在内存里储存在32位的箱子里。

a: 000000000000000000000010 向左移动移位。 b: 000000000000000000000100

100 对应的十进制是4, 所以最后b为4。

位操作符

& ^ |

& 按位与

^ 按位或

| 按位异或

赋值操作符:

= += -= *= /= &= ^= |= >>= <<=

int main()
{
    int a = 2;
    printf("%d\n", a);
    a = a + 5;
    printf("%d\n", a);
    a += 5;
    printf("%d\n", a);
    a = a - 3;
    printf("%d\n", a);
    a -= 3;
    printf("%d\n", a);
    printf("%d"\n, b);
    return 0;
}

单目操作符

单目操作符就是只有一个操作数。 1+1, 这里的+因为有两个操作数,所以就叫做双目操作符

!                                        逻辑反操作

-                                        负值

+                                       正值

&                                       取地址

sizeof                                操作数的类型长度(以字节为单位)

~                                       对一个数的二进制按位取反

--                                       前置、后置--

++                                     前置、后置++

*                                        间接访问操作符(解引用操作符)

(类型)                           强制类型转换

 !:

int main()
{
    // 0 表示 假, 非0 表示真。
    int a = 10;
    printf("%d\n", !a);
    int b = 0;
    printf("%d\n", !b);
    return 0;
}

sizeof:

int main()
{    
    // sizeof 是一个操作符
    // sizeof 不是函数
    int a = 10;
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof a);



    return 0;
}

sizeof操作符对变量来说可以省略括号,但是对于其他的类型就不可以。

int main()
{
    int arr[10] = {0};
    printf("%d\n", sizeof(arr));
    printf("%d\n", sizeof(arr[0]));
    int sz = sizeof(arr)/sizeof(arr[0]);
    printf("%d\n", sz);
    return 0;
}

因为计算的是大小,当我们的数组设置了10个大小元素上限,那么就是代表这个数据占据了4*10大小的字节。

arr里包含的int元素单独sizeof算出了也就是整型的大小,4字节。

那么我们要计算一个数组内多少个元素就可以用数组的大小除于数组内每个元素的大小。

~:

int main()
{
    int a = 0;
    printf("%d\n", ~a);
    // ~ 按位取反
    return 0;
}

按位取反就是 把所有二进制位中数字, 1变成0, 0 变成 1。

整数 a

0

二进制: 000000000000000000000000

~a       : 111111111111111111111111

整数在内存中的存储的是补码

一个整数的二进制表示有3种:

-1:这一串的计算只针对负数, 在正数中原码,反码,补码是一样。

10000000000000000000001(原码)第一个数字1是符号位。

111111111111111111111110 (反码)将除了符号位的数字取反 反码+1 就是补码

111111111111111111111111(补码)

在内存中我们存储的是补码。

++ --:

int main()
{
    int a = 10;
    int b = a++;
    int a_ = 10;
    int b_ = ++a_;
    printf("%d\n", b);
    printf("%d\n", a);
    printf("%d\n", b_);
    printf("%d\n", a_);
    return 0;
}

前置++的运算规则是先进行++的运算后使用。 a_先++ 变成11, b_使用变成11

后置++的运算规则是先使用后进行++的运算。b先使用a,变成10后进行++,a变成11。

 关系操作符

== >= <= != > <

 逻辑操作符

&&                        与

||                           或

 与是两个条件都为真(非0)则出来的才为真,或则是只要两个条件中有一个真就出来真。

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

exp1 ? exp2 : exp3

 exp1 成立,exp2为结果。

exp1 失败,exp3为结果。

相当如下的伪代码:

if(exp1)
    exp2
else:
    exp3
int main()
{
    int a = 0;
    int b = 3;
    int max = 0;
    max = a > b ? a : b;
    printf("%d\n", max);
    return 0;
}

 逗号表达式:

逗号隔开的一串表达式。

int main()
{
    // (2, 4+5, 6);
    int a = 0;
    int b = 2;
    int c = 5;
    int d = (a = b + 2, c = 3, b = a + c);
    printf("%d\n", d); // 从左往右计算,最后一个表达式就是我们的答案。
}

下标引用,函数调用和结构成员:

[]      ()         .     -> 

 这一期就这样。芜湖终于写完啦。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值