首页 > 其他分享 >C语言学习笔记

C语言学习笔记

时间:2023-07-05 16:22:15浏览次数:29  
标签:10 include 定义 int 笔记 C语言 学习 printf main

C语言学习笔记

1.初识C语言

常见类型长度

单位:字节=比特

全局变量和局部变量

全局变量:定义在花括号外的变量

局部变量:定义在花括号内的变量

局部变量和全局变量的名字重合时,局部变量优先

C语言规定变量要 定义在当前代码块的最前面

*计算两数之和:

#include <stdio.h>
int main()
{
    int num1=0;
    int num2=0;
    int sum=0;
    scanf("%d%d",&num1,&num2);//注意scanf要加双引号
    sum=num1+num2;
    printf("sum=%d\n",sum);
    return 0;
}

代码域和生命周期

代码域:限定变量的可用性的代码范围

生命周期:变量的创建到销毁之间的一个时间段

不安全的函数

如scanf()等,会提示改用scanf_s() 取消提示只需要在源文件第一行最前面添加

#define _CRT_SECUR_NO_WARNINGS

常量

1.字面常量 如3;3.14

2.const 修饰的常变量 const int num=1; 之后无法再修改变量num的值

3.#define 定义的标识符常量 在花括号外面,代码块开头

#define MXA 10 //没有等号,没有分号

4.枚举常量

一 一列举

//写在main函数外面

enum Sex //enum是枚举的意思
{
  MALE, //0   //注意是逗号
  FEMALE,//1
  SECRET  //2  //注意没有符号
}; //;必不可少

//在main()函数里引用时的格式:  
	enum Sex s=xxx;

字符串

由双引号闭合的一串字符

注意:字符串结束的标志是一个 \0 的转义字符,在计算长度时是结束标志,不计入字符串内容即不算长度

数组

char arr1[]="abc"; //数组   末尾有结束标志  \0
char arr2[]={'a','b','c'}; // 没有结束标志
char arr3[]={'a','b','c',0}; //添加结束标志0 或 '\0'
print("%s\n",arr1);
print("%s\n",arr2);
print("%s\n",arr3);

转义字符

\n:换行符(ASCII码值为10)
\r:回车符(ASCII码值为13)
\t:制表符(ASCII码值为9)
\b:退格符(ASCII码值为8)
\f:换页符(ASCII码值为12)
':单引号
":双引号
\ddd 表示1-3个8进制数字 如\32 \132
\xdd 表示2个十六进制数字 如\x30

需要注意的是,使用转义字符时应该注意以下几点:
[1]转义字符必须放在引号内部。
[2]转义字符只能用于字符串和字符常量中,不能用于普通的字符变量。
[3]有些编译器可能不支持某些转义字符或支持的方式不同,因此在编写跨平台的代码时应该避免使用不确定的转义字符。

转义字符算一个长度,即如 \t 只有一个字符长度

代码注释

/* */ 缺陷:不能嵌套

选择语句

#include <stdio.h>
int main()
{
    int num=0;
    scanf("%d",&num);
    if(num==0)   //注意此处没有冒号,且为双等号
        printf("OK!\n");
    else         //注意此处没有冒号
        printf("No!\n");
    return 0;
}

循环语句

  • while语句

    #include <stdio.h>
    int main()
    {
        int num=0;
        while(num<10)
            {
            printf("NO!");
            num++;
            printf("num=%d\n",num);
            }                        //注意while循环要添加大括号,不然会造成无限循环
        printf("OK!");
        return 0;
    }
    
  • for语句(之后补充)

  • do-while语句(之后补充)

函数

函数的定义要写在主函数前面

定义函数:

#include <stdio.h>
int Add(int x, int y)
{
    int z=x+y;
    return z;
}
int main()
{
    int sum=0;
    sum=Add(5,6);
    printf("%d",sum);
    return 0;
}

数组

定义:一组相同类型元素的集合

注意:定义数组长度时,只能用常量,并不能使用变量。

#include <stdio.h>
int main()
{
    int arr1[10]={1,2,3,4,5,6,7,8,9,10};  //定义一个存放十个数的数组,注意用大括号
    printf("%d",arr1[0]);                 //数组的下标从0开始,此处为0-9
}
#include <stdio.h>
int main()
{
    int i=0;
    int arr1[10]={1,2,3,4,5,6,7,8,9,10};  //定义一个存放十个数的数组,注意用大括号
    while(i<10)
    {
    printf("%d\n",arr1[i]);//数组的下标从0开始,此处为0-9
    i++;
    }
    printf("over!");
}

操作符

算术操作符

移位操作符

移动的是二进制位

<< 左移1位

​ 右移同理

int a=1;
a:00000000000000000000000000000001=1(4个字节,32比特)
b=<<a;
b=00000000000000000000000000000010=2

位操作符

&与

^异或

!非
二进制按位取反

赋值操作符

单目操作符

(类型):强制类型转化

eg:		(int)3.14

关系操作符

条件操作符

exp1 ? exp2 : exp3

满足exp1条件则执行exp2,不满足则执行exp3

原码、反码、补码

负数在内存中存储的时候,存储的是其二进制的补码,打印出来是原码

最高位是符号位,1是负,0是正

原码得反码

原码符号位不变,其他位按位取反,得到反码

反码得补码

反码+1

补码求原码:

补码-1得到反码

反码符号位不变,其他位按位取反得到原码

++

a++:先把a原来的值拿来使用,再a=a+1;

eg:		a=10;
		b=a++;   //则b=10,a=11;

++a:先让a=a+1,再赋值

eg:		a=10;
		b=++a;   //则b=11,a=11;

常见关键字(static)

auto:

auto int a=10;

位于局部变量前,通常省略

int:

int定义的变量是有符号的

unsigned int a= 1;无符号,恒为正;

struct:

结构体关键字

typedef

类型重命名

eg:		typedef unsigned int u_int;
		u_int num=10;

static

修饰局部变量,局部变量的生命周期变长

#include <stdio.h>
void test()
{
    static int a=1;          //a为静态的局部变量,即多次执行test()时,a的改变是累计的,每一次执行完test()后a不会被销毁
    a++;                     //没有static时,每次执行test()时,a的值从1开始
    printf("a=%d\n",a);
}
int main()
{
	int i = 0;
	while(i<5)
	{
		test();
        i++;
	}
    return 0;
}

/*结果: 
		a=2
		a=3
        a=4
        a=5
        a=6
*/

修饰全局变量,改变了全局变量的作用域,让静态的全局变量只能在自己所在的源文件里使用。

//1.c
int g=2023;
//2.c
extern int g;        //在2.c中引用1.c的全局变量g
//1.c改为
static int g=2023;   //则在2.c中无法再引用变量g

修饰函数,改变了函数的链接属性,不再具有外部链接属性

#define定义常量和宏

定义标识符常量

#define MAX 100;

定义定义宏—带参数(可以不大写)

#define MAX(X,Y) (X>Y?X:Y)

指针

一个内存单元的最小空间是1字节byte

#include <stdio.h>
int main()
{
   int a=10;             //四个字节
   &a;                   //取地址
   printf("%p\n",&a);    //注意是%p,且后面是&a
   return 0;
}
//得到一个十六进制地址

int* p

#include <stdio.h>
int main()
{
   int a=10;            
   int* p=&a;               //p是指针变量,用来存放地址;定义指针变量用int*,char*等,具体类型由内存中存储的数据的类型决定
   printf("%p\n",p);    
   return 0;
}

*p解引用

#include <stdio.h>
int main()
{
   int a=10;            
   int* p=&a;                   
   *p=20;                     //*是解引用操作符,*p表示找到所指向的内容a,此操作即修改a的值为20
   printf("%p\n",p);
   return 0;
}

指针变量的大小

32位平台:4个字节(32bit)

64位平台:8个字节(64bit)

标签:10,include,定义,int,笔记,C语言,学习,printf,main
From: https://www.cnblogs.com/arongsec/p/17528867.html

相关文章

  • mysql学习命令(持续更新)
    1、基本命令行createdatabaseking_db;创建一个数据库showdatabases;显示数据库useking_db;使用数据库createtabletbl_user(u_idintprimarykeyauto_increment,u_namevarchar(32),u_gengdervarchar(8));这里可以养成一个好习惯,在创建用户前面加TBL,别人就知道......
  • 美团特供IDEA入门实战笔记CSDN显踪,竟无良程序员白嫖后举报下架
    今天给大家带来的是:黄文毅,罗军老师著的 《IntelliJIDEA入门与实战》 黄文毅,罗军是谁?黄文毅,CSDN博客专家,架构师。先后就职于厦门星耀蓝图、厦门美图、上海美团等公司。主要从事Java开发工作,具有丰富的软件开发经验,熟悉Java、高并发、分布式及相关的软件架构。出版《分布式......
  • 2023/7/5学习日记 树部分
    学习树剖,树上差分,树剖LCA一.P3038[USACO11DEC]GrassPlantingG树链剖分点权转边权#include<cstdio>#include<algorithm>#include<iostream>#pragmaGCCoptimize(1)#pragmaGCCoptimize(2)#pragmaGCCoptimize(3)#definelsonpos<<1#definersonpos<......
  • C语言运算符 类型与示例
    C语言的运算符是C语言中的重要功能之一,它们使用符号来执行各种数学、关系、按位、条件或逻辑操作。C编程语言提供了多种内置运算符,以满足程序的不同需求。通常,运算符在操作数据和变量的程序中起着关键作用,并作为数学、条件或逻辑表达式的组成部分。 算术运算符示例算术运......
  • 学习英语给你带来了哪些机会?
    昨天文章发出后,J姐姐给予了一些更正,我希望将来也能够像她那样走出去看一看。Y呢,并不是我说的那样混日子,了解更多之后,才发现他是个王者,顿时肃然起敬。“一起学英语”群里大佬云集,希望他们继续多多分享经验。前两天冰雪读完大神分享的《芯片战争》后,就有了很多的心得体会。我想她的开......
  • 算法学习笔记( 一)(1)动态规划(LIS)
    题目链接:https://www.acwing.com/problem/content/897/讲解动态规划问题具有三个特质:子问题重叠:即子问题是相互之间依赖的这个子问题在之后可能被反复使用(此条件并非必要条件但失去它也就没有优化作用了)最优化原理:此问题可以通过子问题的代表元素(最优解)来求出这就......
  • Python基础语法--课程笔记
    Smiling&Weeping----我的心是旷野的鸟,在你的眼睛里找到了它的天空定义和使用类:1.声明类:class类名:成员变量,成员函数2.定义类的对象:对象名=类名()3.成员变量:  公有变量私有变量__xxx4.构造函数: ......
  • 论文阅读:Segment Anything之阅读笔记
    引言论文:SegmentAnything是Meta出的图像语义分割的算法。这个算法因其强大的zero-shot泛化能力让人惊艳,这不抽空拿来学习了一下。该算法的代码写得很清楚、简洁和规范,读来让人赏心悦目。推荐去看源码,很有意思。本篇文章,将以问答形式来解读阅读过程中遇到的困惑,想来这种方式效......
  • C语言中if(a);if(!a);if(a!=0);if(a==0)有什么区别?
    if(a):如果a为非0数字或字符那么就为真,if条件成立,反之不成立。if(!a):如果!a为真,也就是a为0时,if条件成立,反之不成立。if(a!=0):如果a不等于0,则使得if条件成立,反之不成立。等价于if(a)。if(a==0):如果a等于0,则使得if条件成立,反之不成立。等价于if(!a)。......
  • 前端学习 C 语言 —— GDB调试器
    GDB调试器我们在讲指针时用GDB调试段错误。本篇将详细介绍gdb的最常用命令、日志记录、检测点,最后介绍如何用gdb调试进程以及用gdb调试一个开源项目的调试版本——glmark2。gdb介绍GDB,theGNUProjectdebugger——gdb官网gdb是一款调试器,能打断点。支持多种语......