C语言基础知识汇总


1、函数指针 与 指针函数

  • 函数指针:是一个指针,函数是修饰,这是一个指向函数的指针
  • 指针函数:是一个函数,指针是修饰,返回值是指针的函数

1.1 指针函数

就这种,返回值为指针的函数。⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣

char * fun(int a)

1.2 函数指针

指向函数的指针


  • 普通类型
/*
 * @Author: Mr.Dragon
 * @Date: 2021-09-20 18:32:35
 * @LastEditTime: 2021-09-20 18:43:17
 * @LastEditors: Mr.Dragon
 * @Description: Fall_down:所念皆星河
 */

#include "stdio.h"

int MAX(int a,int b)
{
    return a>b?a:b;
}

int main(void)
{
    int (*p)(int,int);
    p = MAX;

    printf("%d",(*p)(5,2));

    return 0;
}

  • typedef类型
/*
 * @Author: Mr.Dragon
 * @Date: 2021-09-20 18:32:35
 * @LastEditTime: 2021-09-20 19:09:31
 * @LastEditors: Mr.Dragon
 * @Description: Fall_down:所念皆星河
 */

#include "stdio.h"

typedef int (*Fun)(int,int);

int MAX(int a,int b)
{
    return a>b?a:b;
}
int MIN(int a,int b)
{
    return a>b?b:a;
}

int main(void)
{
    Fun CompareFun;

    CompareFun = MAX;
    printf("MAX:%d\n",(*CompareFun)(5,2));

    CompareFun = MIN;
    printf("MIN:%d\n",(*CompareFun)(5,2));

    return 0;
}

2、指针数组 与 数组指针

  • 指针数组:是一个数组,指针是修饰,数组元素为指针类型
  • 数组指针:是一个指针,数组是修饰,指向数组的指针

2.1 指针数组

/*
 * @Author: Mr.Dragon
 * @Date: 2021-09-20 19:14:54
 * @LastEditTime: 2021-09-20 19:17:11
 * @LastEditors: Mr.Dragon
 * @Description: Fall_down:所念皆星河
 */

#include "stdio.h"

char * StrBuff[]={
    "a",
    "b",
    "c",
};

int main(void)
{
    for (size_t i = 0; i < sizeof(StrBuff)/sizeof(StrBuff[0]); i++)
    {
        printf("%s\n",*( StrBuff + i));
        /* code */
    }
    return 0;
}

2.2 数组指针

/*
 * @Author: Mr.Dragon
 * @Date: 2021-09-20 19:19:55
 * @LastEditTime: 2021-09-20 19:35:15
 * @LastEditors: Mr.Dragon
 * @Description: Fall_down:所念皆星河
 */
#include "stdio.h"

int main()
{
    /**
     * @description: 用数组指针遍历数组
     * @param {*}  二维数组名特点:1、加一移动一行 2、地址常量(行地址)
     */
    int a[3][2] = {{1,2},{3,4},{5,6}};
    int (*p)[2];
    static int i,j

    p = a;
    printf("%p %p\n",a,a+1);   //移动一行  a和p相同
    printf("%p %p\n",p,p+1);   //移动一行 
    printf("%d %d %d %d\n",a[1][1],p[1][1],*(*(a+1)+1),*(*(p+1)+1));
    printf("%d %d\n",*(*a),*(*a+1));

    for ( i = 0; i < 3; i++)
    {
        for ( j = 0; j < 2; j++)
        {
            printf("%d %d %d %d | ",a[i][j],p[i][j],*(*(p+i)+j),*(*(a+i)+j));
            /* code */
        }
        /* code */
    }
}

3、大小端模式

  • 小端模式低字节在低地址,高字节在高地址
  • 大端模式:高字节在低地址,低字节在高地址

在这里插入图片描述

3.1 确定大小端模式(联合体(共用体))

#include "stdio.h"

union mode
{
    int num;
    char i;
    /* data */
};

char DetermineEnd(void)
{
    union mode sue;
    sue.num = 1;
    return sue.i;
}

int main(void)
{
    if (DetermineEnd() == 1)
    {
        printf("小端模式");
        /* code */
    }
    else
    {
        printf("大端模式");
    }
    return 0;
}

联合体有一个特性就是所有成员共用一块内存,所以在这段代码中定义了一个联合体,定义了两个成员,一个是int型(4Byte),一个是char型(1Byte),正因为联合体所有成员共用一块内存,所有成员起始地址相同,所以给int型变量赋值1,当测试的机器是小端模式,那么低字节在低地址,那么1就在起始位置(联合体的起始,也就是所有成员的起始位置),当测试的机器是大端模式,那么低字节在高位,也就是1在高位。

在这里插入图片描述

4、堆栈生长方向

一般说堆栈,特指栈。

堆栈的生长方向从最本质的理解是堆栈入栈方向是从高地址向低地址增长还是低地址向高地址增长

  • 向上增长(正向增长、向上生长):低地址 向 高地址生长
  • 向下增长(逆向增长、向下生长):高地址 向 低地址生长

在这里插入图片描述

C语言基础知识汇总包括以下内容: 1. 数据类型:C语言提供了基本的数据类型,如整数类型(int、short、long)、浮点类型(float、double)、字符类型(char)等。 2. 变量和常量:在C语言中,可以使用变量来存储和操作数据,而常量是固定的值。 3. 运算符:C语言支持各种运算符,包括算术运算符(+、-、*、/)、关系运算符(>、<、==、!=)、逻辑运算符(&&、||、!)等。 4. 控制语句:C语言提供了控制程序流程的语句,如条件语句(if-else)、循环语句(for、while、do-while)、跳转语句(break、continue、goto)等。 5. 数组:数组是一组相同类型的数据元素的集合,在C语言中使用方括号来定义和操作数组。 6. 函数:函数是一段可重用的代码块,可以通过函数名调用并执行其中的代码。 7. 指针:指针是一个变量,其值为另一个变量的地址,在C语言中可以通过指针来直接访问和操作内存中的数据。 8. 结构体:结构体是一种自定义的数据类型,可以用来存储不同类型的数据成员。 9. 文件操作:C语言提供了文件操作的函数,可以读取和写入文件中的数据。 10. 预处理器:C语言中的预处理器指令可以在编译之前对代码进行一些处理,如宏定义、条件编译等。 这些是C语言基础知识的一些重要点,掌握这些知识可以帮助你理解和编写C语言程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值