C语言基础知识

目录

一.主函数

二.变量

三.关键字 

static 

struct 

四.数据类型 

整型数据

基本整形:

整形的进制:

字符型数据

浮点型数据

布尔类型

五.操作符

算数操作符

移位操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

下标引用,函数调用和结构成员

六.数组

一维数组的定义

一维数组的初始化

一级数组传参  

二维数组的定义

二维数组的初始化

二级数组传参 

 七.指针

一级指针

定义指针变量

引用指针变量

通过指针引用数组

引用数组元素时指针的运算

总结

野指针

概念

如何规避野指针

二级指针

指针数组

数组指针 



一.主函数

int main()
{
    return 0;
}

二.变量

变量名:在C语言中属于标识符,命名有以下严格的规范 

  1. 只能有字母(包括大,小写),数字,下划线(_)组成
  2. 不能以数字开头
  3. 长度不能超过63个字符

三.关键字 

注:不能做变量名!

autobreakcasecharconstcontinuedefaultdodouble
enumexternfloatforgotoregisterinlineintlong
returnrestrictshortsignedsizeofstaticstructvoidswitch
typeofunionunsignedvolatileelsewhileif

static 

static用来修饰变量和函数的:

  1. 修饰局部变量:改变了变量的生命周期,到程序结束,生命周期结束
  2. 修饰全局变量:使全局变量只能在本文件中使用
  3. 修饰函数:使函数只能在本源文件中使用

struct 

结构体的声明: 

struct tag
{
    member-list;
}variable-list;

结构体成员的访问:

  1. 结构体变量.成员变量名
  2.  结构体指针->成员变量名

四.数据类型 

整型数据

基本整形:

类型字节(8bit)取值范围
int4

-2^31 ~ 2^31-1

unsigned int40 ~ 2^31-1

总结:(n位)有符号数:-2^n-1 ~ 2^(n-1)-1   无符号数:0 ~ 2^n-1

整形的进制:

八进制:以0为前缀(012 = 十进制的10)

十六进制:以0x为前缀(0x1A2B = 十进制的6699)

在printf()的进制占位符如下:

  • %d:十进制整数
  • %o:八进制整数
  • %x:十六进制整数
  • %#0:显示前缀为0的八进制整数
  • %#X:显示前缀为0X的十六进制整数

字符型数据

字符‘1’:占一个字节,(ASCII码为49:00110001)

整数1:占4个或者8个字节(00000000 00000000 00000000 00000001)

浮点型数据

m*b^e的形式:m为小数部分,b是基数(通常为2),e是指数部分

布尔类型

#include<stdbool.h>
bool flag=false;

五.操作符

算数操作符

+      -       *      /     %

移位操作符

<< 左移操作符

>>右移操作符

注:移位操作符的操作数只能是整数

左移操作符:

                        左边抛弃,右边补0

右移操作符: 

        1.逻辑移位:左边用0填充,右边丢弃

        2.算术移位:左边用原该值的符号位填充,右边丢弃                 

位操作符

&  按位与

|   按位或

^  按位异或

赋值操作符

+=        -=        *=        /=        %=        >>=        <<=        &=        |=        ^=

单目操作符

!                逻辑反操作

-                负值

+               正值

&              取地址

sizeof       操作数的类型长度(以字节为单位)

~              对一个数的二进制按位取反

--              前置,后置--

++            前置,后置++

*              间接访问操作符(解引用操作符)

(类型)      强制类型转换

关系操作符

>        >=        <        <=        !=        ==

逻辑操作符

&&        逻辑与

||          逻辑或

条件操作符

exp1?exp2 :exp3

逗号表达式

exp1,exp2,exp3,...expN

逗号表达式,从左往右依次进行,整个表达式的结果是最后一个表达式的结果。 

下标引用,函数调用和结构成员

        1.[ ] 下标引用操作符

                操作数:一个数组名+一个索引值

        2.( ) 函数调用操作符

                接受一个或多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数

        3.访问一个结构的成员

.        结构体.成员名

->     结构体指针->成员名

六.数组

一维数组的定义

类型符  数组名[常量表达式];

一维数组的初始化

  1. 在定义数组时对全部数组元素赋予初值。如  int a[3]={1,2,3};
  2. 可以只给一部分元素赋值。如  int a[10]={1,2,3};
  3. 如果想使一个数组元素全部为0。如  int a[10]={0};
  4. 在对全部数组元素赋值的时候,由于数据的个数已经确定,因此可以不指定数组长度。如  int [4]={1,2,3,4};=  int a[]={1,2,3,4};

一级数组传参  

#include<stdio.h>
void test1()  //可以写:int arr[ ] 或  int arr[10]  或  int *arr
    {
        }
void test2() //可以写:int *arr[20] 或  int **arr
    {
        }
int main()
{
  int arr[10]={0};
  int *arr2[10]={0};
  test(arr);
  test2(arr2);
  return 0;
}

二维数组的定义

类型符  数组名[常量表达式][常量表达式];

二维数组的初始化

  1. 分行给二维数组赋初值。如int a[2][3]={{1,2,3},{4,5,6}};
  2. 可以将所有数据放到一个花括号内,按数组元素在内存中的排序顺序对各个元素赋初值。如  int a[2][3]={1,2,3,4,5,6};
  3. 可以对部分元素赋初值。如  int a[2][3]={{1},{5}}; 
  4. 如果对全部元素都赋初值,则第一维的长度可以不指定,但第二维的长度不能省。如   int a [2][3]={1,2,3,4,5,6};  =   int a [  ][3]={1,2,3,4,5,6};  =   int a [][3]={{1,2,3},{}};

        注:一个{ }是行,{ }里面是列。

数组名是什么?

        数组名是数组首元素的地址

但有两个例外:

①.sizeof (数组名):表示整个数组,计算整个数组的大小

②.&数组名:表示整个数组,取出的是整个数组的地址

二级数组传参 

#include<stdio.h>
void test1()  //可以写:int arr[3][5] 或 int arr[ ][5]  或  int (*arr) [5]
    {
        }

int main()
{
  int arr[3][5]={0};
  test(arr);
  return 0;
}

注: int  (*arr) [5] 是数组指针,可以指向一个有5个整形元素的数组

 七.指针

一个变量的地址称为该变量的“指针”

指针变量就是地址变量,用来存放地址,其值是地址

一级指针

定义指针变量

类型名 *指针变量名;

注:(1)指针变量前的“*”表示该变量类型为指针型变量

       (2) 在定义指针变量时必须指定其类型

       (3)指针变量中只能存放地址(指针)

引用指针变量

  • 给指针变量。如:p=&a;//指针变量p的值就是变量a的地址
  • 引用指针变量指向的变量。如:printg("&d",*p);//以整数的形式输出a的值
  • 引用指针变量的值。如:printf("%o",p)://以八进制形式输出变量p的值

通过指针引用数组

所谓数组元素的指针就是数组元素的地址

p = &a[0];  
//p=a

int *p = &a[0];  
//int *p=a
//int *p; p=&a[0];
//int *p; p=a;

引用数组元素时指针的运算

  1. 如果指针变量p已经指向数组的一个元素,则p+1指向同一数组中的下一个元素,p-1指向同一数组中的上一个元素。
  2. 如果p的初值为&a[0],则 p+i 和 a+i 就是数组元素 a[i] 的地址。
  3. *(p+i)=*(a+i)= a[ i ] 。
  4. 如果指针变量p1和p2都指向同一数组,则p2-p1的值(两个地址之差)/(数组元素长度)=指针之间的元素个数。

总结

  • 指针变量:用来存放地址的变量
  • 指针是用来存放地址的,地址是唯一标识一块地址空间的
  • 指针大小在32位平台上是4个字节,在64位平台上是8个字节
  • 指针类型的意义:①指针解引用的权限有多大  ②指针走一步能走多远

野指针

概念

                就是指针指向的位置是不可知的

如何规避野指针

  1. 指针初始化
  2. 小心指针越界
  3. 指针指向空间释放及时置NULL
  4. 避免返回局部变量的地址
  5. 指针使用前检查有效性

二级指针

int a =10;
int *pa = &a;  //一级指针
in* *ppa = &pa; //二级指针

注:*ppa=pa  (int* 是指pa的类型)// **ppa=*pa=a

指针数组

 int* arr[10];         //整形指针的数组

 char* arr[4];        //一级字符指针的数组

数组指针 

int(*p) [10];

  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: C语言基础知识入门PDF是一份C语言的教学材料,适合初学者学习和掌握C语言的基本语法、语义和编程方法。 C语言是一种高效、灵活、可移植、可扩展的编程语言,被广泛应用于操作系统、数据库系统、嵌入式系统等领域。学习C语言,需要掌握计算机基本原理、编程思想和算法设计等知识,而C语言基础知识入门PDF提供了一种快速入门、易于理解的学习途径。 C语言基础知识入门PDF包括了C语言的基本数据类型、运算符、流程控制语句、函数、指针、数组、结构体等内容,通过实例演示和练习题目的方式,帮助学生深入理解C语言的编程思想和技巧。 此外,C语言基础知识入门PDF还介绍了一些常用的C语言开发工具,如编辑器、编译器和调试器等,帮助学习者掌握基本的开发环境和技巧。 总之,C语言基础知识入门PDF是一本很好的C语言入门教材,通过细致详尽的篇章结构、浅显易懂的代码示范和解释,对于初学者学习C语言或复习C语言基础知识来说,都是一份很好的参考资料。 ### 回答2: 《C语言基础知识入门》是一本适合初学者入门的C语言教材,它由浅入深地介绍了C语言的基本语法、数据类型、控制结构、函数以及指针等内容。这本教材所包含的知识点非常基础和易懂,对于初学者来说非常友好,能够循序渐进地帮助他们逐步掌握C语言的基本概念和基础知识。 在学习过程中,这本教材还特别注重实践,提供了大量的实例代码以及习题和答案,帮助学生巩固所学知识,培养编程思维,提高编程能力。此外,这本教材还介绍了一些C语言的衍生语言和标准库,让学生在了解基础知识的同时,对C语言的发展和应用方向也有所了解。 总之,对于初学者来说,《C语言基础知识入门》是一本非常好的入门教材,它简单易懂、注重实践、知识面广泛、涵盖了C语言的基本知识点和实际应用场景,推荐给所有对于C语言感兴趣的初学者。 ### 回答3: 《C语言基础知识入门PDF》是一本适合初学者的C语言教程,它详细介绍了C语言的各个方面。该教程涵盖了C语言的基本语法、数据类型、运算符、流程控制、函数、指针、结构体、文件操作等重要内容。通过学习这本教程,初学者可以逐步掌握C语言基础知识,轻松理解编程思路。 该教程首先讲解了C语言的数据类型,包括整型、浮点型、字符型等,以及变量的定义和命名方法。接着介绍了运算符的使用方法,包括算术运算符、关系运算符和逻辑运算符。 在掌握了基础语法之后,该教程讲解了流程控制语句,如if语句、switch语句和循环语句等。这些语句非常重要,可以让程序根据不同的情况执行不同的操作。 接着,该教程介绍了函数的定义和调用方法。函数可以让程序模块化,使代码更具可读性。同时,它还讲解了指针的概念和使用方法,指针可以让程序更加灵活。 最后,该教程讲解了文件操作。文件是计算机存储数据的重要方式,学会文件操作可以让程序更好地处理数据。 总的来说,《C语言基础知识入门PDF》适合没有任何编程基础的初学者阅读。通过阅读该教程,初学者可以了解C语言的基本语法和编程思想,为以后深入学习打下基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值