首页 > 其他分享 >05C零碎语法

05C零碎语法

时间:2024-06-07 23:32:27浏览次数:16  
标签:status return int void 零碎 05C 语法 dest 字符串

C零碎语法

目录

文章目录

1.函数指针

#include <stdio.h>
 
int max(int x, int y)
{
    return x > y ? x : y;
}
 
int main(void)
{
    /* p 是函数指针 */
    int (* p)(int, int) = & max; // &可以省略
    int a, b, c, d;
 
    printf("请输入三个数字:");
    scanf("%d %d %d", & a, & b, & c);
 
    /* 与直接调用函数等价,d = max(max(a, b), c) */
    d = p(p(a, b), c); 
 
    printf("最大的数字是: %d\n", d);
 
    return 0;
}

2.回调函数

函数指针作为某个函数的参数

以下是来自知乎作者常溪玲的解说:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
#include <stdlib.h>  
#include <stdio.h>
 
// 回调函数
void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{
    for (size_t i=0; i<arraySize; i++)
        array[i] = getNextValue();
}
 
// 获取随机值
int getNextRandomValue(void)
{
    return rand();
}
 
int main(void)
{
    int myarray[10];
    /* getNextRandomValue 不能加括号,否则无法编译,因为加上括号之后相当于传入此参数时传入了 int , 而不是函数指针*/
    populate_array(myarray, 10, getNextRandomValue);
    for(int i = 0; i < 10; i++) {
        printf("%d ", myarray[i]);
    }
    printf("\n");
    return 0;
}
typedef struct {
    int status;
    void (*statusChange)(int status);
} JT_Device;

JT_Device gDevice;

void addCallbackFunc(JT_Device *device, void (*pstatusChange)(int status)) {
    device->statusChange = pstatusChange;
}

void run(JT_Device *device) {
    device->status = 10;
    if(device->status == 1) { // 假设这里是1而不是1e
        if(device->statusChange != NULL) {
            device->statusChange(device->status);
        }
    }
}
 // 用户代码
void callBack(int status) {
    printf("Callback:\n");
    printf("status = %d\n", status);
}

int main() {
    addCallbackFunc(&gDevice, callBack);
    run(&gDevice);
    return 0;
}

3.数据拷贝

3.1静态内存分配请添加图片描述### 4.1动态内存分配

请添加图片描述## 5.二维数组做形参

#include <stdio.h>

int getArrayData(int (*p)[4], int lines, int columns) //数组指针来接收二维数组的地址,行数,列数
{ 
    int data;
    return data = *(*(p + lines) + columns);
}

int main()
{
    int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
	int data;
    data = getArrayData(array, 1, 1); //获取array[1][1]的值
    return 0;
}

字符串

6.sizeof()和strlen()的区别

char str[] = "hello";  //结尾有'\0'
sizeof(str);  //6,计算的是整个空间的长度
strlen(str);  //5,只计算有效字符,会忽略结尾的'\0'

char *p = "hello";
sizeof(p);  //8,p是一个char *
strlen(p);  //5
sizeof(p) 返回的是指针变量 p 的大小(地址的大小),在64位系统上通常是8字节。 strlen(p) 返回的是指针 p 指向的字符串的长度(不包括结尾的 \0),对于 "hello" 这个字符串是5。

7.strcpy()/strncpy()函数

7.1strcpy() 函数用于将一个字符串复制到另一个字符串中

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, World!";
    char dest[20];

    strcpy(dest, src); // 将src复制到dest

    printf("Destination: %s\n", dest);
    return 0;
}

注意
strcpy() 不检查目标数组的大小,如果目标数组不够大,可能会导致缓冲区溢出,这是一个常见的安全问题。
它在复制完所有字符后不会在目标字符串的末尾添加空字符 \0,所以它假定源字符串以 \0 结尾。

7.2strncpy() 函数提供了一种更安全的方式来复制字符串

允许你指定最大复制的字符数

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello, World!";
    char dest[20];

    strncpy(dest, src, 13); // 将src的前13个字符复制到dest

    // 确保字符串以空字符结尾
    dest[13] = '\0';

    printf("Destination: %s\n", dest);
    return 0;
}

标签:status,return,int,void,零碎,05C,语法,dest,字符串
From: https://blog.csdn.net/2302_79752447/article/details/139390189

相关文章

  • 约束条件补充、主键和外键约束、过滤条件(查询语法)
    【一】约束条件补充--【一】什么是约束条件--约束条件就是为了限制表中的数据,保证数据的准确性和可靠性而存在的限制规则--在创建表和字段的时候,约束条件是可有可无的,但是某些情况下为了约束数据的准确所以要必须加约束条件--【二】约束条件概览--【1】null和notnull......
  • Vue3基础知识语法
    Vue3基础知识目录Vue3基础知识一、创建Vue3项目1、创建方式通过vue_cli创建通过vite创建2、项目文件3、源码解析二、Vue语法1、API风格选项式API(OptionsAPI)组合式API(CompositionAPI)2、setupsetup简介setup语法糖3、响应式数据refreactiveref对比reactiv......
  • 【栈】736. Lisp 语法解析
    本文涉及知识点栈LeetCode736.Lisp语法解析给你一个类似Lisp语句的字符串表达式expression,求出其计算结果。表达式语法如下所示:表达式可以为整数,let表达式,add表达式,mult表达式,或赋值的变量。表达式的结果总是一个整数。(整数可以是正整数、负整数、0)let表......
  • 常用笔记语法记录
    一、markdown常用操作1、标题利用#实现一级标题二级标题三级标题以此类推2、段落背景色语法<table><tr><tdbgcolor=#FF00FF>背景色的设置是按照十六进制颜色值:#7FFFD4</td></tr></table><table><tr><tdbgcolor=#FF83FA>背景色的设置是按照十六进制颜色值:#FF83FA</t......
  • Stable diffusion prompts 使用语法、参数讲解、插件安装教程
    Stablediffusionprompts使用语法、参数讲解、插件安装教程本文基于StablediffusionWebUI进行讲解(安装在AutoDL上,安装在本地电脑上的也同样适用本教程)。初始界面:文件目录结构:上图红框中的4个文件夹是我们常用到的,embeddings放置训练的embedding模型,它可......
  • python基本语法元素
    1.输入与输出实现人机交互。输出:使用print()函数print("Hello,World!")#简单文本输出,输入:使用input()函数,用户输入默认被视为字符串name=input("请输入你的名字:")print("你好,"+name)2.注释单行注释:使用#符号#这是一个单行注释多行注释:使用三个单引号......
  • 微信小程序(5.模板语法)
    系列文章目录微信小程序(1.基础知识)微信小程序(2.配置文件)微信小程序(3.常用样式和组件)微信小程序(4.事件系统)微信小程序(5.模板语法)文章目录系列文章目录1.声明和绑定数据2.声明和修改数据3.setData-修改对象类型数据4.setData-修改数组类型数据5.数据绑定-简易......
  • Markdown语法
    Markdown语法表格&文本样式样式语法示例加粗前后**或__加粗1加粗2斜体前后*或_斜体1斜体2删除线前后~~删除线内联代码前后`code下划线前<u>后</u>下划线高亮前后==高亮文本引用uTools新一代效率工具平台链接......
  • 正则表达式学习(3)——语法
    普通字符[abc]匹配中括号的所有字符[^abc]匹配除了中括号的所有字符[A-Z]匹配A-Z的大写字母区间内的字符[a-z]匹配a-z的小写字母区间内的字符[0-9]匹配0-9的数字.匹配除了换行、回车(\n,\r)的单个字符,等价于[^\n\r]\s是匹配所有空白符,包括换行\S非空白符,不包括换......
  • cron表达式语法规则及常见示例
    cron表达式语法规则及常见示例cron表达式产生的背景什么是cron表达式常见示例cron表达式产生的背景cron表达式最初是由Unix操作系统中的cron守护进程所使用的一种语法规则,用于设置定时任务。cron守护进程是Unix系统中的一个后台进程,用于周期性地执行指定的命令或脚本......