C语言学习笔记(一)初识C语言

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-38进制数字 如\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)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值