C语言学习2

目录

一、作用域、extern声明外部符号

二、生命周期

三、常变量、const修饰的常变量

四、define定义的标识符常量

五、枚举常量

六、字符串

七、转义字符

八、注释

九、选择语句

循环语句--while循环for循环do-while

十、调用函数求和

十一、数组

十二、操作符

1、算术操作符%取余,/商、*、+、-

2、移位操作符--<<左移、>>右移

3、位操作----&、|、^

4、复合赋值符

5、单目操作符

5.1-sizeof()


20231104

一、作用域、extern声明外部符号

①main.c
#include <stdio.h>
//#include <stdlib.h>
int global=2023; 
void test()
{
        printf("test()--%d\n",global); 

}
int main()//main函数有且唯一   
{
        test();
        printf("%d\n",global); 
        //未声明的标识符
        //extern声明外部符号的 
        extern int g_val; 
        printf("g_val=%d\n",g_val);
        //局部变量的作用域 
                int num=0;    
        {
                printf("num=%d\n",num); 
                }    
        return 0; 
 } 

②sum.c
int g_val=0;

①main.c
#include <stdio.h>
//#include <stdlib.h>
int global=2023; 
void test()
{
        printf("test()--%d\n",global); 

}
int main()//main函数有且唯一   
{
        test();
        printf("%d\n",global); 
        //未声明的标识符
        //extern声明外部符号的 
        extern int g_val; 
        printf("g_val=%d\n",g_val);
        //局部变量的作用域 
                int num=0;	
        {
                printf("num=%d\n",num); 
                }	
        return 0; 
 } 

②sum.c
int g_val=0;

二、生命周期


#include<stdio.h>//standard input output 
int main()//main函数有且唯一   
{
        {
                int a=10;
                //局部变量进入作用域即生命周期的开始,出作用域即生命周期的结束  
                printf("a=%d\n",a);//0k
                //全局变量的生命周期=main函数=整个程序 

        }
        //printf("a=%d\n",a);//error
        return 0; 
}


#include<stdio.h>//standard input output 
int main()//main函数有且唯一   
{
        {
                int a=10;
                //局部变量进入作用域即生命周期的开始,出作用域即生命周期的结束  
                printf("a=%d\n",a);//0k
                //全局变量的生命周期=main函数=整个程序 

        }
        //printf("a=%d\n",a);//error
        return 0; 
}

跨平台性/可移植性 

跨平台性/可移植性 #define _CRT_SECURE_NO_WARNINGS //忽略不安全的函数--源文件第一行 属性查找目标位置10.0--VC--vcprojectitens--newc++file.cpp里面拷贝上面一句(用记事本打开的话会出现拒绝访问),建议用edit with notepad++(Notepad++) scanf、strcpy、strlen、strcat等函数都不安全

三、常变量、const修饰的常变量


#include <stdio.h>
int main()   
{
        //const--常属性 
        //const修饰的常变量 
        const int num=4;//num本质上还是变量,但具有常属性 
        int arr1[10]={0};//ok
        //error
        //int n=10;
        //int arr[n]={0}; 
        //const int n=10;
        //int arr[n]={0}; 
        //[Error] variable-sized object may not be initialized可变大小的对象可能未初始化
        const int n=10;
        int arr[n];
        arr[n]=2;//arr[n];  or  arr[0]=2;  都没错
        //n=20;//error   n不能更改 
        //printf("a=%d\n",a);
        return 0; 
}

#include <stdio.h>
int main()   
{
        //const--常属性 
        //const修饰的常变量 
        const int num=4;//num本质上还是变量,但具有常属性 
        int arr1[10]={0};//ok
        //error
        //int n=10;
        //int arr[n]={0}; 
        //const int n=10;
        //int arr[n]={0}; 
        //[Error] variable-sized object may not be initialized可变大小的对象可能未初始化
        const int n=10;
        int arr[n];
        arr[n]=2;//arr[n];  or  arr[0]=2;  都没错
        //n=20;//error   n不能更改 
        //printf("a=%d\n",a);
        return 0; 
}

四、define定义的标识符常量--define不是关键字

#include <stdio.h>
//#define定义的标识符常量 
#define MAX 10
int main()   
{
        int arr[MAX]={10};
        printf("%d\n",MAX);
        return 0; 
}

#include <stdio.h>
//#define定义的标识符常量 
#define MAX 10
int main()   
{
        int arr[MAX]={10};
        printf("%d\n",MAX);
        return 0; 
}

五、枚举常量--enum不可变,但变量可变


#include <stdio.h>

//枚举常量
//枚举--一一列举,eg:星期:一到七
//枚举关键---enum 
enum Sex
{
        male,
        female,
        secret

};//分号不可省略
//male,female,secret--枚举常量 
int main()
{
        //enum Sex sex=male;
        //sex=female;//不会报错的
        //female=7;//会报错,枚举常量Sex是不能改变的,变量sex是可以改变的
        printf("%d\n",male);//0
        printf("%d\n",female);//1
        printf("%d\n",secret);//2
        return 0;
 } 
?


#include <stdio.h>

//枚举常量
//枚举--一一列举,eg:星期:一到七
//枚举关键---enum 
enum Sex
{
        male,
        female,
        secret

};
//male,female,secret--枚举常量 
int main()
{
        //enum Sex sex=male;
        //sex=female;//不会报错的
        //female=7;//会报错,枚举常量Sex是不能改变的,变量sex是可以改变的
        printf("%d\n",male);//0
        printf("%d\n",female);//1
        printf("%d\n",secret);//2
        return 0;
 } 
?

六、字符串strlen--字符串长度

strlen--string length 字符串长度


#include <stdio.h>
//#include 
#include <string.h>//有此句以后不会出现警告 
int main()
{
        //数据在计算机上存储的时候,存储的是二进制但
        // #%av这些并不方便存储,所以对应每个字符都有一个编号,eg:a--97,A--65(ASCII码值)【ASCII编码方式】 
        //怎么存字符串,拿一个空间存,则用数组 
        char arr1[]="abc";//数组中有四个元素,最后末尾是0(实质是\0),可以把一个字符串放到一个字符数组中去的 
        //"abc"--'a','b','c','\0'--'\0'标志字符串的结束 
        //char arr2[]={'a','b','c',0};//和arr1的输出一样,此处0是\0的ASCII码值 
        //char arr2[]={'a','b''c','\0'};//此行和arr1意义一样 
        //转义字符\0是字符串的结束标志,不算字符串内容,不算作字符串长度 
        //'a'--97 
        char arr2[]={'a','b','c'};//没有遇到结束符\0,则随机打印 
        printf("%s\n",arr1);//打印字符串用%s //abc
        printf("%s\n",arr2);//abc
        //字符串类型 
        "abc";
        "hello world\n";
        "";//空字符串 
        //strlen--string length 字符串长度
        printf("%d\n",strlen(arr1)); //3
        printf("%d\n",strlen(arr2)); //3,vs上面是15(遇到\0才会停止),应该是随机值 
        return 0;
 } 


#include <stdio.h>
//#include 
#include <string.h>//有此句以后不会出现警告 
int main()
{
        //数据在计算机上存储的时候,存储的是二进制但
        // #%av这些并不方便存储,所以对应每个字符都有一个编号,eg:a--97,A--65(ASCII码值)【ASCII编码方式】 
        //怎么存字符串,拿一个空间存,则用数组 
        char arr1[]="abc";//数组中有四个元素,最后末尾是0(实质是\0),可以把一个字符串放到一个字符数组中去的 
        //"abc"--'a','b','c','\0'--'\0'标志字符串的结束 
        //char arr2[]={'a','b','c',0};//和arr1的输出一样,此处0是\0的ASCII码值 
        //char arr2[]={'a','b''c','\0'};//此行和上面一行意义一样 
        //转义字符\0是字符串的结束标志,不算字符串内容,不算作字符串长度 
        //'a'--97 
        char arr2[]={'a','b','c'};//没有遇到结束符\0,则随机打印 
        printf("%s\n",arr1);//打印字符串用%s //abc
        printf("%s\n",arr2);//abc
        //字符串类型 
        "abc";
        "hello world\n";
        "";//空字符串 
        //strlen--string length 字符串长度
        printf("%d\n",strlen(arr1)); //3
        printf("%d\n",strlen(arr2)); //3,vs上面是15(遇到\0才会停止),应该是随机值 
        return 0;
 } 

七、转义字符

--转变原来的意思、%s是字符串%c是字符

int main()
 {
             printf("abc");//abc
             printf("abc\n");//abc   \n表示换行 
             return 0;

 }


#include<stdio.h> 
//#include 
#include <string.h>//有此句以后不会出现警告 
int main()
 {
             printf("abc");//abc
             printf("abc\n");//abc   \n表示换行 
        printf("c:\tes\32\test.c\n");//c:      es     est.c
         //\t-水平制表符        (按Tab        ) 
        printf("c:\\tes\\32\\test.c\n");//c:\tes\32\test.c
        printf("%c\n",'a');//a
        //printf("%c\n",''');//error,本来单引号是成对出现,但是我们只要单个的,不要它成对出现的义,所以利用\转义 
             printf("%c\n",'\'');//'
         //    printf("%c\n","abc");//没有数据,因为“abc”为字符串不能用%c单个字符输出 ?
             printf("%s\n","abc");
        printf("%c\n",'\"');//" 
             printf("%s\n","\"");//" 
             printf("%c\n",'\32');
             printf("%d\n",strlen("c:\test\32\test.c"));//13  
         //\32---为一个字符 ,表示32作为八进制代表的那个十进制数字,作为ASCII码值,对应的字符 
         //32(八进制)--26(十进制)--  -> 
         //\ddd(ddd表示1~3个八进制的数字,如\130 X) 
             printf("%c\n",'\132');
         //\xdd(dd表示2个十六进制数字,如\x30 0)
             printf("%c\n",'\x61');//a    6*16^1+1*16^1=97==>a
         return 0;

 }

int main()
 {
         	printf("abc");//abc
         	printf("abc\n");//abc   \n表示换行 
         	return 0;

 }




#include<stdio.h> 
//#include 
#include <string.h>//有此句以后不会出现警告 
int main()
 {
         	printf("abc");//abc
         	printf("abc\n");//abc   \n表示换行 
        printf("c:\tes\32\test.c\n");//c:      es     est.c
         //\t-水平制表符		(按Tab		) 
        printf("c:\\tes\\32\\test.c\n");//c:\tes\32\test.c
        printf("%c\n",'a');//a
        //printf("%c\n",''');//error,本来单引号是成对出现,但是我们只要单个的,不要它成对出现的义,所以利用\转义 
         	printf("%c\n",'\'');//'
         //	printf("%c\n","abc");//没有数据,因为“abc”为字符串不能用%c单个字符输出 ?
         	printf("%s\n","abc");
        printf("%c\n",'\"');//" 
         	printf("%s\n","\"");//" 
         	printf("%c\n",'\32');
         	printf("%d\n",strlen("c:\test\32\test.c"));//13  
         //\32---为一个字符 ,表示32作为八进制代表的那个十进制数字,作为ASCII码值,对应的字符 
         //32(八进制)--26(十进制)--  -> 
         //\ddd(ddd表示1~3个八进制的数字,如\130 X) 
         	printf("%c\n",'\132');
         //\xdd(dd表示2个十六进制数字,如\x30 0)
         	printf("%c\n",'\x61');//a    6*16^1+1*16^1=97==>a
         return 0;

 }

八、注释

C++注释风格:// 一行或多行

devc++多行注释:Ctrl+/

C语言注释风格:/* */ 不能嵌套注释

九、选择语句


#include<stdio.h>
int main()
{
        int input=0; 
        printf("加入我们\n");
        printf("你要好好学习吗?(1/0)>:");
        scanf("%d",&input);
        if(input==1)
        printf("offer\n");
        else
        printf("卖米线\n");
        return 0;
 } 


#include<stdio.h>
?int main()
{
        int input=0; 
        printf("加入我们\n");
        printf("你要好好学习吗?(1/0)>:");
        scanf("%d",&input);
        if(input==1)
        printf("offer\n");
        else
        printf("卖米线\n");
        return 0;
 } 

循环语句--while循环for循环do-while


int main()
{
        int line=0;
        printf("加入我们\n") ;
        while(line<200)
        {
                printf("敲一行代码:%d\n",line);
                line++;

        }
        if(line>=200)
             printf("offer\n");
        return 0;

 } 


int main()
{
        int line=0;
        printf("加入我们\n") ;
        while(line<200)
        {
                printf("敲一行代码:%d\n",line);
                line++;

        }
        if(line>=200)
             printf("offer\n");
        return 0;

 } 

十、调用函数求和

//函数
//函数名Add,函数参数x,y ,int是函数返回类型,{}里面叫做函数体 
int Add(int x,int y)
{
        int z=x+y;
        return z;

}
int main()  
{
        //计算两个数的和 
        int num1=10; 
        int num2=20;
        int sum1=0,sum2=0;
        int a =100;
        int b=200;
        sum1=Add(num1,num2);
        sum2=Add(a,b);
        printf("sum1=%d sum2=%d\n",sum1,sum2);
        return 0; 
 } 

//函数
//函数名Add,函数参数x,y ,int是函数返回类型,{}里面叫做函数体 
int Add(int x,int y)
{
        int z=x+y;
        return z;

}
int main()  
{
        //计算两个数的和 
        int num1=10; 
        int num2=20;
        int sum1=0,sum2=0;
        int a =100;
        int b=200;
        sum1=Add(num1,num2);
        sum2=Add(a,b);
        printf("sum1=%d sum2=%d\n",sum1,sum2);
        return 0; 
 } 

十一、数组

一组相同类型元素的集合

int main()
{
        //     int arr[10];//定义一个存放10个整数数字的数组
        //    char arr[20];
        //    float arr[5]; 
        int arr[10]={1,2,3,4,5,6,7,8,9,10};
        printf("%d\n",arr[4]);//5,用下标访问元素
        int i=0;
        while(i<10)
        {
                printf("%d ",arr[i]);
                i++;
        }
        return 0;
}

int main()
{
        // 	int arr[10];//定义一个存放10个整数数字的数组
        //	char arr[20];
        //	float arr[5]; 
        int arr[10]={1,2,3,4,5,6,7,8,9,10};
        printf("%d\n",arr[4]);//5,用下标访问元素
        int i=0;
        while(i<10)
        {
                printf("%d ",arr[i]);
                i++;
        }
        return 0;
}

十二、操作符

1、算术操作符%取余,/商、*、+、-

2、移位操作符--<<左移、>>右移


int main()
{
        int a=5%2;//取余数 
        int b=5/2;//商 
        printf("a=%d b=%d\n",a,b);
        int c=1;//整型1占4个字节--32bit位
        //00000000000000000000000000000001             ==1
        //00000000000000000000000000000100(补0)==4 
        int d=c<<2;//左移
        printf("c=%d d=%d\n",a,d);
        return 0;

}

算术%取余,/商
int main()
{
        int a=5%2;//取余数 
        int b=5/2;//商 
        printf("a=%d b=%d\n",a,b);
        int c=1;//整型1占4个字节--32bit位
        //00000000000000000000000000000001      ==1
        //00000000000000000000000000000100(补0)==4 
        int d=c<<2;
        printf("c=%d d=%d\n",a,d);
        return 0;

}

3、位操作----&、|、^

int main()
{
    //(2进制)位操作 
    //&按位与 --两个都为真才为真 
    //|按位或 --有一个即为真 
    //^按位异或 --对应的二进制位相同,则为0;相异则为1
     
    int a=1;   //001
    int b=5;   //101
    
    int c=a&b; //001==>1
    int d=a|b; //101==>5
    int e=a^b; //100==>4
    printf("c=%d\n",c);
    printf("d=%d\n",d);
    printf("e=%d\n",e);
    return 0;
}

int main()
{
	//(2进制)位操作 
	//&按位与 --两个都为真才为真 
	//|按位或 --有一个即为真 
	//^按位异或 --对应的二进制位相同,则为0;相异则为1
	 
	int a=1;   //001
	int b=5;   //101
	
	int c=a&b; //001==>1
	int d=a|b; //101==>5
	int e=a^b; //100==>4
	printf("c=%d\n",c);
	printf("d=%d\n",d);
	printf("e=%d\n",e);
	return 0;
}

4、复合赋值符  += -= *= /= %=  &=  >>= <<= |= ^=

int main()
{
    int a=10;
    a=20;//赋值     ==判断相等
    a=a+10;//和    a+=10;    完全等价
    a-=20;
    a&=2;
    //复合赋值符 += -= *= /= %=  &=  >>= <<= |= ^=  
    return 0;
 } 

int main()
{
	int a=10;
	a=20;//赋值     ==判断相等
	a=a+10;//和	a+=10;	完全等价
	a-=20;
	a&=2;
	//复合赋值符 += -= *= /= %=  &=  >>= <<= |= ^=  
	return 0;
 } 

5、单目操作符! & sizeof ~

#include <stdio.h>
//#include <stdlib.h>
#include<string.h> //有此句以后不会出现警告 

//单目操作符 
//双目操作符
//三目操作符 
int main()
{
//	int a=10;
//	int b=20; 
//	a+b;//+双目操作符(有两个操作数) 
    int a=10;
    printf("%d\n",a);//10
    printf("%d\n",!a);//0
	return 0;
}

5.1-sizeof()

int a=10;
    int num=0;
    printf("%d\n",sizeof(a));  //4
    printf("%d\n",sizeof(int)); //4
    printf("%d\n",sizeof a);  //4//sizeof 变量名()可以省略 
    //error--printf("%d\n",sizeof int); 
    //sizeof计算的是变量/类型所占空间的大小,单位是字节 
    //stelen计算的是字符串的长度

    int arr[10] ={0};//10个整型 元素的数组 10*sizeof(int)=4- 
    printf("%d\n",sizeof (arr));
    //计算数组的元素个数
    //个数=数组总大小/每个元素的大小

    num=sizeof(arr)/sizeof(arr[0]);
    printf("num=%d\n",num);

int a=10;
    int num=0;
    printf("%d\n",sizeof(a));  //4
    printf("%d\n",sizeof(int)); //4
    printf("%d\n",sizeof a);  //4//sizeof 变量名()可以省略 
    //error--printf("%d\n",sizeof int); 
    //sizeof计算的是变量/类型所占空间的大小,单位是字节 
    //stelen计算的是字符串的长度
	int arr[10] ={0};//10个整型 元素的数组 10*sizeof(int)=4- 
    printf("%d\n",sizeof (arr));
    //计算数组的元素个数
	//个数=数组总大小/每个元素的大小
	num=sizeof(arr)/sizeof(arr[0]);
	printf("num=%d\n",num);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值