C语言基础

一、基本数据类型

        在C语言中,数据类型基本上可以分为:基本数据类型(int、char等)、构造数据类型、指针类型、空类型。

        其中基本数据类型包括整型、字符型、实型(浮点型)

int:整型,字节数(2、4不同类型整型),常用语存储整数,int a=100;

char:字符型,字节数(1),用于存储单个字符,char a=“a”;

float:单精度浮点型(实型),字节数(4),用于存储含有小数的数值,float  test=25.5;

double:双精度浮点型(实型),字节数(8),用于存储更多小数,double test=25.2345678

取值范围(以32位操作系统为例):

short int:短整型,2字节,-32768~32768        [-2^15~2^15-1]。

int :整型,4字节,-2,147,483,648~2,147,483,648        [-2^31~2^31-1]。

long int :长整型,4字节,-2,147,483,648~2,147,483,648        [-2^31~2^31-1]。

float :单精度型,4字节,     -3.4*10^-38~3.4*10^38。

double:双精度型,8字节,-1.7*10^-308~1.7*10^308

long double:长双精度型,16字节,-1.2*10^-4932~-1.7*10^4932

二、打印命令:printf

格式化输出语句,按照指定的格式打印数据,在调试时可以通过打印命令寻找问题。

格式:printf("输出格式符",输出项);

格式符:

int pai = 3.1415926
printf("PAI= %4f",pai)

三、常量 

       1、 值不会随着程序运行而发生改变的量成为常量。一般在在主函数运行之前可以使用define定义,且常量在使用前必须先定义。

#define a 1000

int main()
{
    printf("常量 = %d",a);
}

2、 const修饰的常变量

对所赋值的变量有固定作用,后续不能改变,虽说不能改变,但是他的本质依旧为变量,不可以当做常量使用。

#include <stdio.h>
int main()
{
	const int num = 4;
	printf("%d\n", num);
	int num = 8;//此处对num再赋值已经无效了
	printf("%d\n", num);
	return 0;
}

 结果:两次打印均为4;

#include <stdio.h>
int main()
{
	const int n = 10;
	int arr[n] = { 0 };//数组[]中需要的是一个常量,虽然const修饰的n有常属性,但是他的本质是一个变量所以有错误
	return 0;
}

 无输出结果;

3、枚举常量

需要一一列举出来,需要用到枚举关键字enum,放在枚举里边的叫枚举常量 

#include<stdio.h>
enum people
{
	KID,
	MAN,
	WOMAN,
};                //其中KID,MAN,WOMAN,叫做枚举常量
int main()
{
	printf("%d\n", KID);
	printf("%d\n", MAN);
	printf("%d\n", WOMAN);
	return 0;
}

结果:0

           1

            2 

四、自动类型转换和强制类型转换

        数据类型存在自动转换的情况,在使用不同数据类型运算时,编译自动完成转换。

        如图,自动类型转换时,char型可以自动转换为int型和double型,但是遵守ASCII码,int型可以自动转换为double型。

        强制类型转换是通过定义类型转换运算来实现的,一般形式为:

(数据类型)(表达式)

示例:

int a=10;
double b;

b=(double) (a)

        注意事项:数据类型和表达式的括号不可以省略,尤其是在表达式是多项式的时候。 转换不会改变原先变量的值。

五、运算符号

1、常见运算法:加、减、乘、除(取整)、求余、自增、自减运算。

自增自减运算需要注意的是:++a or a++;注意区别:一个是先加后运算,一个是先运算后加。

2、关系运算符

关系运算表达式运算为真(1)和假(0)。在使用时,>=之间没有空格。 

3、逻辑运算符

六、数组 

1、数组声明

格式:数组类型 数组名称[长度];

  • 数据类型 数组名称[长度n] = {元素1,元素2…元素n};
  • 数据类型 数组名称[] = {元素1,元素2…元素n};
  • 数据类型 数组名称[长度n]; 数组名称[0] = 元素1; 数组名称[1] = 元素2; 数组名称[n-1] = 元素n

 注意:

1、数组的下标从0开始;

2、元素格式小于数组长度,多余数组元素初始化0;

3、可以通过循环将数组元素遍历出来;

4、数组可以作为函数参数、数组的元素也可以作为函数参数,根据函数内部内容使用。

七、常用字符串操作

常用字符串操作函数如下:

  • strlen()获取字符串的长度,在字符串长度中是不包括‘\0’而且汉字和字母的长度是不一样的
  • strcmp()在比较的时候会把字符串先转换成ASCII码再进行比较,返回的结果为0表示s1和s2的ASCII码相等,返回结果为1表示s1比s2的ASCII码大,返回结果为-1表示s1比s2的ASCII码小
  • strcpy()拷贝之后会覆盖原来字符串且不能对字符串常量进行拷贝
  • strcat在使用时s1与s2指的内存空间不能重叠,且s1要有足够的空间来容纳要复制的字符串

 八、指针

        指针就是变量的地址,指针变量时专门用来存放内存地址的变量,有着自己的尺寸出空间和内存编号。

        指针变量是在内存中开辟一个空间,该空间里面存放地址。(首先是变量,其次是指针变量)

        指针变量存的是指针。

指针的相关操作:

1、&:取地址符,获取变量的地址,对于多字节的变量,取地址取到的是首地址,即地址低位。

2、* 解引用符,在定义指针变量的时候,*只起到标识作用,标识定义的是一个指针变量,其他场景下,表示操作指针指向空间的内容

    int *p = &a;  //首先定义了指针变量p(此时*起到标识作用),然后把变量a的地址赋给指针变量,或者    
                  //说指针指向了变量a
    p = &b;  //把变量b的地址赋给指针变量,或者说指针指向了变量b
    int *q = p;  //定义了指针变量q,把p的内容(地址)给了q(空间)
int main()
{
    int a=100;b=10;
    int *p1,*p2;  //定义指针变量
    P1 = &a;      //将变量a地址赋给指针变量P1
    P2 = &b;
    printf("a=%d,b=%d",a,b);
    printf("*p1=%d,*p2=%d",*P1,*P2);  //指针变量前面加* 取值指针变量指向地址的数值。
}
int *p //定义一个指针变量
(int*)&a  //是一个c语言中的类型转换符号,表示将其后面的内容转换为
#include <stdio.h>

int main()
{
    int num=10;
    int *ptr;

    ptr=(int*)&num;

    printf("num的值为:%d\n",num);
    printf("ptr指向的整型数据的值为:%d\n",*ptr);
    return 0;
}

九、结构体

在实际使用C语言的过程中,一组数据中可能存在很多个、很多种的变量类型。例如描述一个人的信息,也许会用到char型的姓名、char型的性别、int型的年龄、int型的身高、float型的体重。如上可见,使用基本的数据类型来表示这些信息,不但类型多,且臃肿繁杂。因此引入“结构体”,可以很好的解决这个问题。

结构体的一般形式:

struct 结构名 {

成员列表

};

如用结构体声明一个人相关信息的结构:

struct people {

char name[100];

char gender[2];

int age;

}

定义结构体变量

结构体如上所示,但是现在还只是一个声明,并不是一个实际的数据对象,因此还要定义结构体变量:

//1、
struct people {

char name[100];

char gender[2];

int age;

}

struct people 张三;


//2、
struct people {

char name[100];

char gender[2];

int age;

}张三;

//3、没有结构名的类型
struct {

char name[100];

char gender[2];

int age;

}张三;

访问结构成员

结构体使用结构成员运算符点(.)来访问结构体中的各个元素。

struct people p1, p2;      //定义结构体变量
strcpy(p1.name, "Jack");
stu1.age = 18;


//或者
p2 = (struct people){"Tom", 15,};

九、函数

函数是指实现了某种功能的代码块,在C中,分为库函数和自定义函数。库函数是指由C提供,用户无需定义,只需要在程序前调用头文件即可使用。自定义函数:用户按照自己的需求定制的函数。对于用户自定义函数,不仅要在程序中定义函数本身,而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。

而无论是库函数还是用户自定义函数都分为两种类型。

/***************************
*Name:无参函数
*类型标识符 函数名(){
*    声明部分;
*    语句
*}
***************************\
void test()
 {
    printf("这是一个无参函数");
 }


/***************************
*Name:有参函数
*类型标识符 函数名(形参1,2,3,4,5){
*    声明部分;
*    语句
*}
***************************\
int FindMax(int a, int b) {
    int max;
    max = a >= b ? a : b;
    return max;
}

函数返回值是一个类型与函数声明中定义的返回类型相同的值,如果函数声明中没有定义返回类型,则默认为int类型。

除此之外,如果函数声明中定义了void类型的返回值,则表示函数不会返回任何值。在这种情况下,函数体内部不能使用return语句返回值。

调用的一般形式为:函数名(实参);
被调用函数的声明和函数原型:在主调函数中调用某函数之前应对该被调函数进行说明(声明),这与使用变量之前要先进行变量说明是一样的。在主调函数中对被调函数作说明的目的是使编译系统知道被调函数返回值的类型,以便在主调函数中按此种类型对返回值作相应的处理。
其一般形式为: 类型说明符 被调函数名(类型 形参,类型 形参...);或 类型说明符 被调函数名(类型,类型...);
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值