C语言个人笔记

c语言基础知识梳理,供大家参考,查阅。

指针数组

  1. 定义:

本质是数组,里面存放的是指针

  1. 格式:

存储类型 数据类型 *数组名[元素个数]

int *arr[3] = {};

  1. 应用实例:
3.1. 用于存放普通变量的地址

int a = 10, b = 20, c = 30;

int *arr[3] = {&a, &b, &c};

访问b的地址:

arr[1] *(arr+1)

访问 b 的值

*(arr[1]) *(*(arr+1))

3.2. 用于存放二维数组的每一行第一个元素的地址(列地址)

int a[2][3] = {1, 2, 3, 4, 5, 6};

int *arr[2] = {a[0], a[1]};

访问 a[1][2] 的地址:

arr[1]+2 *(arr+1)+2

arr:第一个元素的地址

arr+1:第二个元素的地址

*(arr+1):第二个元素:a[1]:第二行第一列的地址

*(arr+1)+2:第二行第三列的地址  &a[1][2]

3.3. 用于存放字符串

char str[32] = "hello";   // 存放的是整个hello字符串

char *str = "hello";   // 存放的是hello字符串的首地址

    char str[32] = "hello";

    char *strs = "hello";

    printf("%s\n", str);

    printf("%s\n", strs);

    printf("%p %p\n", strs, &str[0]);

    printf("%c %c\n", *(strs+1), str[1]);

使用指针数组存放字符串

char *str[3] = {"hello", "world", "xiaomisu7"};

打印 "xiaomisu7" 字符串

    char *str[3] = {"hello", "world", "xiaomisu7"};

    printf("%s\n", str[2]);  // xiaomisu7

    printf("%s\n", *(str+2));  // xiaomisu7

    printf("%s\n", *(str+2)+4);  // misu7

打印 'm' 这个字符

    printf("%c\n", *(*(str+2)+4));  // m

    printf("%c\n", *(str[2]+4));  // m

练习:用指针将整型组s[8]={1,2,3,4,5,6,7,8}中的值逆序存放。

练习:用变量a给出下面的定义(3C科技、宇视科技,神思电子,中安云科,北京凝思软件)

a) 一个整型数:· int a;

b) 一个指向整型数的指针: int *a;

c) 一个指向指针的的指针,它指向的指针是指向一个整型数: int **a;

d) 一个有10个整型数的数组: int a[10];

e) 一个有 10个指针的数组,该指针是指向一个整型数的 int *a[10];

f) 一个指向有 10个整型数数组的指针: int (*a)[10];

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数:

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

函数

  1. 定义

一个完成特定功能的代码模块

  1. 三要素

功能、参数、返回值

  1. 格式

存储类型 数据类型 函数名(参数列表)

{

函数体;

}

  1. 没有参数:参数列表可以省略,也可以用void
  2. 没有返回值:数据类型为 void , 函数内部没有return语句。
  3. 有返回值:要根据返回值的数据类型定义函数的数据类型
  4. 定义子函数时直接定义在主函数上面,如果定义在主函数下面需要提前声明函数

  1. 函数声明

数据类型 函数名(参数列表);  // 形参

  1. 函数调用
  1. 没有返回值:直接调用:函数名(实参);
  2. 有返回值:如果需要接收返回值,就要定义一个与返回值类型相同的变量去接收

如果不需要接收返回值,就直接调用函数

#include <stdio.h>

void fun()
{
     
     
    printf("hello\n");
}

void add1(int a, int b)
{
     
     
    printf("sum = %d\n", a + b);
}

int add2(int a, int b)
{
     
     
    return a + b;
}

int sub(int a, int b);

int main(int argc, char const *argv[])
{
     
     
    fun();
    add1(1, 2);
    int sum = add2(3, 5);
    printf("%d\n", sum);
    int su7 = sub(7, 3);
    printf("%d\n", su7);

    return 0;
}

int sub(int a, int b)
{
     
     
    return a - b;
}

练习1:编写一个函数,函数的2个参数,第一个是一个字符,第二个是一个char *,返回字符串中该字符的个数。

#include <stdio.h>

int count(char c, char *s)
{
     
     
    int n = 0;
    while (*s != '\0')
    {
     
     
        if(c == *s)
        {
     
     
            n++;
        }
        s++;
    }
    return n;
}

int main(int argc, char const *argv[])
{
     
     
    printf("请输入一个需要查找的字符:");
    char c = getchar();
    char str[32];
    printf("请输入一个字符串:");
    scanf("%s", str);
    int num = count(c, str);
    printf("查找到该字符个数为:%d个\n", num);

    return 0;
}

练习2:编程实现strlen函数的功能,strlen计算字符串实际长度,不包含’\0’

  1. 函数传参
    1. 值传递

单向传递,将实参传递给形参使用,改变形参实参不会受到影响

#include <stdio.h>

int fun(int num, int sum)
{
     
     
    num++;
    sum++;
    return num + sum;
}

int main(int argc, char const *argv[])
{
     
     
    int a = 3, b = 4;
    int ret = fun(a, b);
    printf("%d %d %d\n", a, b, ret);  // 3 4 9
    return 0;
}

    1. 地址传递

双向传递,在函数中修改形参,实参也会随之变化

#include <stdio.h>

int fun(int *num, int *sum)
{
     
     
    (*num)++;
    (*sum)++;
    return *num + *sum;
}

int main(int argc, char const *argv[])
{
     
     
    int a = 3, b = 4;
    int ret = fun(&a, &b);
    printf("%d %d %d\n", a, b, ret);  // 4 5 9
    return 0;
}

    1. 数组传递

和地址传递一样,参数中存在数组的定义,它也会认为是一个指针

#include <stdio.h>

char *fun2(char a[32])
{
     
     
    a = "hello";
    
    char *str = "hello";
    // 如果是数组的话是 32, 如果是指针的话是4
    printf("%d\n", sizeof(a));  // 4
    return a;
}

int main(int argc, char const *argv[])
{
     
     
    char *ch = fun2("abc");
    printf("%s\n", ch);
    
    char *str = "hello";
    return 0;
}

补充:

char *p = "hello";
// 
需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕需求响应动态冰蓄冷系统及其优化策略展开研究,结合Matlab代码实现,探讨了在电力需求侧管理背景下,冰蓄冷系统如何通过优化运行策略参与需求响应,以实现削峰填谷、降低用电成本和提升能源利用效率的目标。研究内容包括系统建模、负荷预测、优化算法设计(如智能优化算法)以及多场景仿真验证,重点分析不同需求响应机制下系统的经济性和运行特性,并通过Matlab编程实现模型求解与结果可视化,为实际工程应用提供理论支持和技术路径。; 适合人群:具备一定电力系统、能源工程或自动化背景的研究生、科研人员及从事综合能源系统优化工作的工程师;熟悉Matlab编程且对需求响应、储能优化等领域感兴趣的技术人员。; 使用场景及目标:①用于高校科研中关于冰蓄冷系统与需求响应协同优化的课题研究;②支撑企业开展楼宇能源管理系统、智慧园区调度平台的设计与仿真;③为政策制定者评估需求响应措施的有效性提供量化分析工具。; 阅读建议:建议读者结合文中Matlab代码逐段理解模型构建与算法实现过程,重点关注目标函数设定、约束条件处理及优化结果分析部分,同时可拓展应用其他智能算法进行对比实验,加深对系统优化机制的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值