金丹一层 —— 深度刨析简单问题

目录

前言:

深度刨析问题


前言:

1.CSDN由于我的排版不怎么好看,我的有道云笔记比较美观,请移步有道云笔记

2.修炼必备

  1)入门必备:VS2019社区版,下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com)

  2)趁手武器:印象笔记/有道云笔记

  3)修炼秘籍:牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 (nowcoder.com)

  4)雷劫必备:leetcode 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 

  注:遇到瓶颈怎么办?百度百科_全球领先的中文百科全书 (baidu.com)

深度刨析问题

1.如何使用%c的形式打印\、'和"

#include <stdio.h>

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

2.定义数组的[]中能不能使用变量,能不能使用const修饰的变量

#include <stdio.h>

int main()
{
    int num = 10;
    //数组的下标操作符中不能使用变量
    //int arr[num] = { 1,2,3 };
    
    const int data = 10;
    //错误,虽然const修饰的变量不能改变,但是它本质上还是一个变量,不能使用
    //int arr[data] = { 1,2,3,4,5 };
    return 0;
}

3.字符串与字符数组的区别

#include <stdio.h>

int main()
{
    char arr1[] = { 'a','b','c','d' };
    char arr2[] = "abcd";
    //在相同字符的情况下,字符数组的大小比字符串的占用少1字节
    printf("%d\n", sizeof(arr1));//4
    printf("%d\n", sizeof(arr2));//5
    
    //字符串有结束标志,字符数组无结束标志
    printf("%d\n", strlen(arr1));//随机值
    printf("%d\n", strlen(arr2));//4
    return 0;
}

4.逻辑右移和算术右移

逻辑右移:低位丢弃,高位补0

算术右移:低位丢弃,高位补符号位

//11111111 11111111 11111111 11111111 -1的补码
//01111111 11111111 11111111 11111111  逻辑右移
//11111111 11111111 11111111 11111111  算术右移

 5.sizeof算术符的内部会不会进行算术运算?求数据类型所占字节会不会出现整形提升?

1)sizeof内部是一个表达式的话,这个表达式不会进行计算的

2)sizeof内部的数据char、short会进行整型提升,占4个字节

#include <stdio.h>

int main()
{
    //sizeof内部是表达式的话不会进行算术运算
    int a = 10;
    printf("%d\n", a);//10
    printf("%d\n", sizeof(a));//4
    printf("%d\n", sizeof(a++));//4
    printf("%d\n", sizeof(++a));//4
    printf("%d\n", a);//10,没有进行表达式计算
    
    char c = 8;
    printf("%d\n", sizeof(c));//1
    printf("%d\n", sizeof(+c));//4
    printf("%d\n", sizeof(-c));//4
    
    short b = 8;
    printf("%d\n", sizeof(b));//2
    printf("%d\n", sizeof(+b));//4
    printf("%d\n", sizeof(-b));//4
    return 0;
}

 6.前置++/--和后置++/--的区别

1)前置++/--:先自增,再使用

2)后置++/--:先使用,再自增

#include <stdio.h>

int main()
{
    //1)前置++/--:先自增,再使用
    int i = 10;
    printf("%d\n", ++i);//11
    //printf("%d\n", --i);//9
    
    //2)后置++/--:先使用,再自增
    int a = 10;
    //printf("%d\n", a++);//10
    printf("%d\n", a--);//10
    return 0;
}

 7.typedef的作用

        ——对类型进行重定义,然后声明变量的可以使用这个类型

#include <stdio.h>

typedef unsigned int unit;//将unsigned int重定义为unit
int main()
{
    //使用重定义的类型进行声明变量
    unit num = 10;//等价于 unsigned int num = 10;
    printf("%u\n", num);//10
    return 0;
}

8.static的作用

        1)修饰局部变量:使局部变量的生命周期变长(只被初始化一次,被初始化后一直存在)

#include <stdio.h>
void test(int i)
{
    //static修饰局部变量
    static int num = 0;
    num = i;
    printf("%d\n", num);// 0 1 2 3 4 5 6 7 8 9
}

int main()
{
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        test(i);
    }
    return 0;
}

         2)修饰全局变量:使全局变量只能在本文件内使用(全局变量具有外部链接属性)

//test.c
#include <stdio.h>

extern int age;//引用外部的全局变量
//extern int age; 当使用static修饰的age会报错

int main()
{
    printf("%d\n", age);//10
    return 0;
}

//add.c
#include <stdio.h>
int age = 10;
//static int age = 10;

        3)修饰函数:使函数只能在本文件内使用(意思同上)

#include <stdio.h>

//static修饰函数
static void test()
{
    printf("test~");
}

int main()
{
    test();
    return 0;
}

9.指针是什么?

        ——指针就是地址,指针一般是存放变量的地址,我们一般常说的指针也叫做指针变量

#include <stdio.h>

int main()
{
    int num = 10;
    //指针是用来存放其他变量的地址的
    int* p = &num;
    
    //看看指针是否存放的是num的地址
    printf("%p\n", &num);
    printf("%p\n", p);
    return 0;
}

10.指针变量的大小

        ——32位平台下占4个字节,64位平台下占8个字节

#include <stdio.h>

int main()
{
    printf("%d\n", sizeof(char*));
    printf("%d\n", sizeof(short*));
    printf("%d\n", sizeof(int*));
    printf("%d\n", sizeof(long*));
    printf("%d\n", sizeof(long long*));
    printf("%d\n", sizeof(float*));
    printf("%d\n", sizeof(double*));
    return 0;
}

        32位平台:

        64位平台:

​ 

11.结构体指针访问成员属性的形式 

1)使用->访问

2)使用(*xx).属性访问

#include <stdio.h>

struct Person
{
    int age;
    char gender;
};
typedef struct Person Person;

int main()
{
    Person person = { 18,'m' };
    Person* p = &person;
    
    //结构体指针访问成员属性的形式
    //形式1:使用->
    printf("%d\n", p->age);//
    printf("%d\n", p->gender);
    //形式2:(*xx).属性
    printf("%d\n", (*p).age);
    printf("%c\n", (*p).gender);
    return 0;
}

12.一个程序能有几个main函数?为什么

        ——一个程序只能有一个主函数(main),main函数是程序的入口,如果main函数多了程序不知道那个是入口,即报错

#include <stdio.h>

int main(){}
int main(){}

13.C语言的栈区、堆区和静态区的区别

14.const对指针的作用?

1)const 放在*的前面,则指针所指向的变量的内容不能改变,但指针的指向能改变

2)const 放在*的后面,则指针所指向的变量的内容能改变,但指针的指向不能改变

#include <stdio.h>

int main()
{
    int a = 10;
    int b = 11;
    
    const int* p1 = &a;
    //指向变量的内容不能改变
    //*p1 = 20;
    //能改变指向的变量
    p1 = &b;
    printf("%d\n", *p1);//11
    
    int* const p2 = &a;
    //指向变量的内容能改变
    *p2 = 12;
    printf("%d\n", *p2);//12
    //不能改变指向的变量
    //p2 = &a;
    return 0;
}

15.extern关键字的作用

        ——引用其他文件的全局变量/函数

//test.c
#include <stdio.h>

extern int age;

int main()
{
    printf("%d\n", age);//20
    return 0;
}

//add.c
int age = 20;

16.C语言有几种结构类型

        1)顺序结构:代码从上到下依次执行,直到结束

#include <stdio.h>

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

        2)分支结构:代码在执行的过程中,会选择性的执行某段代码

#include <stdio.h>

int main()
{
    int a = 10;
    int b = 9;
    
    if (a > b)
    {
        printf("a > b\n");
    }
    else
    {
        printf("a < b\n");
    }
    return 0;
}

        3)循环结构:代码循环执行某段代码

#include <stdio.h>

int main()
{
    int i = 0;
    while (i < 10)
    {
        printf("believe youself, you can do it!!!\n");
        i++;
    }
    return 0;
}

17.什么是语句?

        ——以分号结束的表达式/常量叫做语句;

#include <stdio.h>

int main()
{
    "abcdef";//分号结束
    int num = 10;//分号结束
    return 0;
}

18.多分支的执行规则

        ——某个分支的条件成立后,执行该分支,其他分支不再执行

#include <stdio.h>

int main()
{
    int score = 0;
    scanf("%d", &score);
    
    if (score > 0 && score < 60)
    {
        printf("成绩不合格\n");
    }
    else if (score >= 60 && score < 70)
    {
        printf("成绩一般\n");
    }
    else if (score >= 70 && score < 80)
    {
        printf("成绩良好\n");
    }
    else if (score >= 80 && score < 90)
    {
        printf("成绩优良\n");
    }
    else if (score >= 90 && score <= 100)
    {
        printf("成绩优秀\n");
    }
    else
    {
        printf("你输入的成绩有误,请重写输入~\n");
    }
    return 0;
}

19.switch()中表达式和case:后面的值的特点

1)switch中的表达式只能是整型表达式(char、short、int、long、long long)

2)case后面跟的值:只能是整型常量值

20.break/continue能不能在switch中使用,作用是什么

1)break能在switch中使用,使用后跳出switch语句,执行switch后的语句

2)continue不能再switch中使用

#include <stdio.h>

int main()
{
    int weekday = 0;
    scanf("%d", &weekday);
    double data = 4;
    //switch(data){}()中只能为整型表达式
    switch (weekday)
    {
        //case 1.0://错误,case的后面只能跟整型常量值且整型常量值不能重复
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期日\n");
            break;
        default:
            printf("你输入的数字有误,请重新操作\n");
            break;//好习惯
    }
    return 0;
}

21.break和continue在循环中的作用

1)break执行后跳出循环,执行循环后面的语句

2)continue执行后,跳过本次循环(即跳过continue后的语句),执行下一次循环

#include <stdio.h>

int main()
{
    int i = 0;
    while (i < 10)
    {
        if (i == 5)
        {
            break;
        }
        printf("%d ", i);//0 1 2 3 4
        i++;
    }
    
    i = 0;
    while (i < 10)
    {
        if (i == 5)
        {
            continue;
        }
        printf("%d ", i);//0 1 2 3 4 死循环
        i++;
    }
    return 0;
}

22.C语言有那些数据类型?

1)整型家族:char、short、int、long、long long

2)浮点型家族:float、double

3)构造类型:结构体、联合类型(union)、枚举类型(enum)、数组

4)指针类型

5)void型(常用于在形参和函数的返回类型)

#include <stdio.h>

//空类型
void test(void){}

int main()
{
    //整型家族
    char a;
    short b;
    int c;
    long d;
    long long e;
    
    //浮点型家族
    float f;
    double g;
    
    //构造类型
    //struct{};//里面需要填构造中的参数
    //union{};
    int arr[10];
    enum{};
    
    //指针类型
    int* p1;
    char* p2;
    float* p3;
    
    return 0;
}

 23.画图详解char的范围

24. 什么是大端字节序和小端字节序?

1)小端字节序:数据的低字节存储在内存中的低地址处,高字节存储在内存中的高地址处

2)大端字节序:数据的低字节存储在内存中的高地址处,高字节存储在内存中的低地址处

​ 25.如何判断一台机器是大端字节序还是小端字节序?

        ——看该机器的低字节数据存储在内存中的低地址处还是高地址处

#include <stdio.h>

int check_sys(int a)
{
    //返回低地址的第一个字节的数据值
    return (*(char*)&a);
}

int main()
{
    int a = 1;
    int ret = check_sys(a);
    
    //返回比较
    if (ret == 1)
    {
        printf("小端\n");
    }
    else
    {
        printf("大端\n");
    }
    return 0;
}

26.整形提升是对什么数据类型进行提升?

        ——整型提升只能使用于char和short类型,把char和short转化为int后进行计算

#include <stdio.h>

int main()
{
    char ch1 = 127;
    //01111111
    char ch2 = 3;
    //00000011
    char ch3 = ch1 + ch2;
    //01111111  --> 127
    //00000011  --> 3
    //10000010 --> 补码
    //11111111 11111111 11111111 10000010 整型提升
    //10000010  截断
    //10000001 
    //11111110 -126 结果
    
    printf("%d %d\n", ch3, ch1 + ch2);//-126 130
    return 0;
}

27.VS的调试技巧

1)F10 ---> 逐过程(跳过函数)

2)F9 ---> 打断点和取消断点(配合F5使用)

3)F11 ---> 逐语句(一句一句的调试)

4)F5 ---> 开始调试(配合F9使用)

28.异或运算符的性质

1)相同数异或为0

2)任何一个数与0异或是这个数本身

3)a ^ 0 = 0; a ^ b ^ b = a; b ^ b = 0;

#include <stdio.h>

int main()
{
    int a = 10;
    int b = 10;
    int c = 0;
    int d = 5;
    
    int ret = a ^ c;
    int res = a ^ b ^ d;
    printf("%d\n", ret);//10
    printf("%d\n", res);//5
    return 0;
}

29.如何判断一个数是不是偶数?

法一:取模运算:判断这个数的余数是不是不为1

法二:按位与运算:判断这个数&1的结果是不是0

#include <stdio.h>

int main()
{
    int num = 0;
    scanf("%d", &num);
    
    if (num & 1)
    {
        printf("%d是奇数\n", num);
    }
    else
    {
        printf("%d是偶数\n", num);
    }
    return 0;
}
#include <stdio.h>

int is_judge_even(int num)
{
    return num % 2;
}

int main()
{
    int num = 0;
    scanf("%d", &num);
    
    if (is_judge_even(num))
    {
        printf("%d是奇数\n", num);
    }
    else
    {
        printf("%d是偶数\n", num);
    }
    return 0;
}

30.函数的格式

返回类型 函数名(形参列表……) {}

#include <stdio.h>

void test()
{
    printf("test...\n");
}

int main()
{
    test();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/401.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python基础—面向对象(超详版)

Python基础—面向对象面向对象简介什么是面向对象类与对象父类与子类面向对象的特性单继承与多继承单继承多继承多层继承封装多态重写与调用python重写python调用super函数前言&#xff1a; &#x1f3e0;个人主页&#xff1a;以山河作礼。 &#x1f4dd;​&#x1f4dd;​此专…

基于stm32智能语音电梯消毒系统

这次来分享个最近做的项目&#xff0c;stm32智能语音电梯消毒系统功能说明&#xff1a;在电梯&#xff0c;房间&#xff0c;客道区域内&#xff0c;检测到人&#xff0c;则执行相关动作&#xff01;例如继电器开关灯&#xff0c;喷洒酒精等行为。手机app/微信小程序可以控制需要…

滑动窗口算法

&#x1f34f;&#x1f350;&#x1f34a;&#x1f351;&#x1f352;&#x1f353;&#x1fad0;&#x1f951;&#x1f34b;&#x1f349;&#x1f95d; 啥是滑动窗口&#xff0c;它能解决什么样的问题&#xff1f; 文章目录&#x1f350;滑动窗口的概念&#x1f34f;适用场景…

Docker圣经:大白话说Docker底层原理,6W字实现Docker自由

说在前面&#xff1a; 现在拿到offer超级难&#xff0c;甚至连面试电话&#xff0c;一个都搞不到。 尼恩的技术社群&#xff08;50&#xff09;中&#xff0c;很多小伙伴凭借 “左手云原生右手大数据”的绝活&#xff0c;拿到了offer&#xff0c;并且是非常优质的offer&#…

蓝桥杯C++组怒刷50道真题

&#x1f33c;深夜伤感网抑云 - 南辰Music/御小兮 - 单曲 - 网易云音乐 &#x1f33c;多年后再见你 - 乔洋/周林枫 - 单曲 - 网易云音乐 50题才停更&#xff0c;课业繁忙&#xff0c;有时间就更&#xff0c;2023/3/14/15:06写下 目录 &#x1f44a;填空题 &#x1f33c;一…

ChatGPT作者John Schulman:我们成功的秘密武器

来源&#xff5c;TalkRL OneFlow编译 翻译&#xff5c;杨婷、徐佳渝、贾川 除了OpenAI&#xff0c;外界可能很少有人知道ChatGPT模型成功的真正原因&#xff0c;实际上&#xff0c;OpenAI也会对ChatGPT拥有的巨大影响力感到不可思议。这种困惑和惊喜就像工程师们解bug时获得的意…

在Docker上部署FastApi(最新)

目录 1 文件上传与新建目录 文件目录 2 修改requirements.txt文件 3 修改Dockerfile.txt文件 4 打包成镜像 5 运行启动 6 查看运行状态与日志 1 文件上传与新建目录 新建以下目录&#xff0c;其中.py文件是自己上传的 文件目录 新建以下文件 2 修改requirements.txt文件…

关于我拒绝了腾讯测试开发岗offer这件事

2022年刚开始有了向要跳槽的想法&#xff0c;之前的公司不能算大厂但在重庆也算是数一数二。开始跳槽的的时候我其实挺犹豫的 其实说是有跳槽的想法在2022年过年的时候就有了&#xff0c;因为每年公司3月会有涨薪的机会&#xff0c;所以想着看看那能不能涨&#xff08;其实还是…

RK3568平台开发系列讲解(显示篇)什么是DRM

🚀返回专栏总目录 文章目录 一、DRM介绍二、DRM与framebuffer的区别沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍什么是DRM。 一、DRM介绍 DRM 是 Linux 目前主流的图形显示框架,相比FB架构,DRM更能适应当前日益更新的显示硬件。 比如FB原生不支…

【产品经理】产品经理思维要素

产品思维对于产品经理来说十分重要&#xff0c;能够有效提升工作效率和工作质量。本文作者分享了有关产品经理思维要素的相关内容&#xff0c;从思维误区、思维方式建议、理性思维探讨展开分析&#xff0c;一起来学习一下吧&#xff0c;希望对你有帮助。 一、简述 1. 背景 先…

【C++】模板(上)

文章目录1、泛型编程2、函数模板函数模板的实例化模板参数的匹配原则3、 类模板类模板的实例化1、泛型编程 void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {double temp left;left …

智慧水务监控系统-智慧水务信息化平台建设

平台概述柳林智慧水务监控系统&#xff08;智慧水务信息化平台&#xff09;是以物联感知技术、大数据、智能控制、云计算、人工智能、数字孪生、AI算法、虚拟现实技术为核心&#xff0c;以监测仪表、通讯网络、数据库系统、数据中台、模型软件、前台展示、智慧运维等产品体系为…

全网独家首发|极致版YOLOv7改进大提升(推荐)网络配置文件仅24层!更清晰更方便更快的改进YOLOv7网络模型

有不少小伙伴和我交流YOLO改进的时候&#xff0c;都说YOLOv7的网络配置文件长达104层&#xff0c;改起来很费力&#xff0c;数层数都要数很久&#xff0c;还很容易出错&#xff0c;而且基于YOLOv5代码架构&#xff0c;Debug起来也确实比较费时&#xff0c;所以博主对YOLOv7网络…

CSDN新星计划新玩法、年度勋章挑战赛开启

文章目录&#x1f31f; 写在前面&#x1f31f; 逐步亮相的活动&#x1f31f; 勋章挑战赛&#x1f31f; 新星计划&#x1f31f; 有付费课程才可参与&#xff1f;&#x1f31f; 成就铭牌&#x1f31f; 博客跟社区的关系&#x1f31f; 写在最后&#x1f31f; 写在前面 哈喽&#…

【java】 java开发中 常遇到的各种难点 思路方案

文章目录逻辑删除如何建立唯一索引唯一索引失效问题加密字段模糊查询问题maven依赖冲突问题&#xff08;jar包版本冲突问题&#xff09;sql in条件查询时 将结果按照传入顺序排序数据库主从复制 主从不同步问题数据库读写分离 读写不一致java服务如何作为websocket客户端spring…

2023年度数学建模竞赛汇总

本人7年数学建模竞赛经验&#xff0c;历史获奖率百分之百。团队成员都是拿过全国一等奖的硕博&#xff0c;有需要数模竞赛帮助的可以私信我。 下面主要列几年一些比较有含金量的数学建模竞赛&#xff08;按比赛时间顺序&#xff09; 1. 美国大学生数学建模竞赛 报名时间&…

想要成为高级网络工程师,只需要具备这几点

首先&#xff0c;成为高级网络工程师的目的&#xff0c;就是为了搞钱。高级网络工程师肯定是不缺钱的&#xff0c;但成为高级网络工程师你一定要具备以下几点&#xff1a;第一 心态作为一个高级网工&#xff0c;首先你必须情绪要稳定&#xff0c;在碰到重大故障的时候不慌&…

一个9个月测试经验的人,居然在面试时跟我要18K,我都被他吓到了····

2月初我入职了深圳某家创业公司&#xff0c;刚入职还是很兴奋的&#xff0c;到公司一看我傻了&#xff0c;公司除了我一个测试&#xff0c;公司的开发人员就只有3个前端2个后端还有2个UI&#xff0c;在粗略了解公司的业务后才发现是一个从零开始的项目&#xff0c;目前啥都没有…

R语言编程基础

文章目录安装运算符判断函数递归安装 根据自己的操作系统&#xff0c;下载R语言环境后&#xff0c;安装&#xff0c;并将安装路径加入到环境变量&#xff0c;即可从命令行进入R环境 >rR version 4.2.2 (2022-10-31 ucrt) -- "Innocent and Trusting" Copyright …

Spring Cloud学习笔记【服务注册与发现-Eureka】

文章目录什么是服务治理什么是服务注册与发现Eureka两组件Eureka搭建搭建单机Eureka ServerEureka客户端注册user服务user服务单点测试搭建集群Eureka Server集群启动测试子服务集群搭建服务调用和负载均衡测试效果什么是服务治理 服务治理是一种管理和控制分布式系统中各个服…
最新文章