C语言自学笔记

本文详细解析了C语言中指针的基本概念及其使用方法,包括指针的声明、指针与变量的关系、指针的读取与写入操作。同时,通过实例展示了如何使用`gets()`和`scanf()`函数输入并处理字符串,特别是解决`scanf()`函数遇到空格时的问题,并介绍了`gets()`函数的安全性警告及解决方法。

C语言自学笔记

限于笔者水平有限,书写记录的不够全面,希望能得到大家的指正,也可以私下交流

  • 关于指针的一些认识
  • gets()的一些认识
  • scanf()的一些认识

关于指针的一些认识

    int n = 2;
    int *p ;
    p = &n;
    //打印出n的地址为了和下面做比对
    printf("&n=%d\n",&n);
    //打印出指针p所存储的值(p所指向的变量的地址)
    printf("p=%p\n",p);
    //打印出指针p的地址(和指针所指向的地址不是一个地址)
    printf("&p=%d\n",&p);
    //通过指针p读取指针所指向的变量的值
    printf("%d\n",*p);

首先我们要明白的是,指针变量也是一个变量,它具备一切其他变量所拥有的特性。
- 系统会在程序执行时,自动为变量分配内存
- 系统分配的内存都是随机的
- 每个变量都可以存储一个值
根据以上变量的特性,所以我们明白几点:
->1.指针变量也是一个变量,它有自己的地址,它的地址是声明指针变量时,操作系统就分配给它的
->2.指针变量是特殊的变量,它也可存储值,但它存的是它所指向的变量的地址
->3.指针变量可以通过取值符号’*’来读取它所指向的变量的值,进而操作它所指向的变量

注:笔者说的只是很浅显的一些关于指针的认识,以后学到新知识再做补充。

gets()和scanf()的一些认识

#include <stdio.h>
/*
    输入一行字符,分别统计出其中英文字母,空格,数字,和其他字符的个数.
    空格 32 a~z 97~122 A~Z  65~90 0-9 48~57
 */
int main()
{
    char string[50];
    printf("随意输入一行字符\n");
    int num_a=0,num_b=0,num_c=0,num_d=0;
    char c ;
//    scanf("%s",string);   scanf输入的时候有空格后面的字符就不参与赋值/
    gets(string); //有个警告:this program uses gets(),which is unsafe
    for (int i= 0;string[i]!='\0'; i++) {
        c = string[i];
            if (c==' ') {
                num_b++;
            }else if ((c>=97&&c<=122)||(c>=65&&c<=90)) {
                num_a++;
            }else if (c>='0'&c<='9') {
                num_c++;
            }else num_d++;

    }
    printf("有 %d 个英文字母\n",num_a);
    printf("有 %d 个空格\n",num_b);
    printf("有 %d 个数字\n",num_c);
    printf("有 %d 个其他字符\n",num_d);
    return 0;
}

笔者在做最基础的C语言的练习的时候遇到了这么一个题,本来也没有什么的并不是特别难。只是在用scanf()函数输入一个字符串的时候,发现当我输入的字符串遇到’ ‘(空格)的时候,后面的字符串是接收不了的。

笔者后来也大致明白了,因为我只定义了一个变量接收字符串,输入空格等于是把字符串分成n+1份了(n是输入的空格数),我应该需要有n+1个字符变量才能接收,而且空格不记录在内。不符合题目的要求

后来笔者上网找了一些资料,用到的方法是gets()函数。gets()可以无上限得输入字符串,但是要确保buffer的空间足够大。

注:笔者用gets()解决了这个问题,但是还是不够理解gets()的机制以及为什么会出现gets()不够安全的警告,以后有了解会持续更新的

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值