相比于malloc加了有一个自动初始化的功能int main() { int* p = (int*)calloc(10,sizeof(int));//创建之后就默认数据初始化为0 if (p == NULL) { printf("%s\n", strerror(errno)); } else { int i = 0; for (i = 0; i < 10; i++)
使用动态内存开辟函数,可以创捷长度可变的数组大小,这样可以减少空间的浪费。在创建可变长度的数组时,其实在C99标准下,是可以直接创建的,例如linux下gcc编译器可以通过编译命令gcc test.c -std=c99,来实现。在vs下是不支持的,所以需要通过内存开辟函数来进行创建。在开辟空间的时候,有可能会开辟失败,所以需要检查malloc的返回值是否为空指针,如果为空则开辟失败,同时也可以使用
test.c #define _CRT_SECURE_NO_WARNINGS 1 #include "contact.h" void menu() { printf("**************************************\n"); printf("******** 1.add 2.del ********\n"); printf("******
枚举类型是可以赋予初值的,即使不赋予,系统默认也会赋予初值,从0开始自增1。枚举类型的大小是系统定义的,一般为一个整型。枚举是创建一种类型,一种枚举类型,define只是定义的标识符,系统计算的时候还是按照赋予的值来进行运算的。结构体创建的也是一种类型。enum Color { RED, YELLOW, BULE }; enum Sex { MALE = 2, FEMALE = 3,
上节写到结构体对齐数,以及系统默认对齐数的修改,以及对齐数为何出现,实际上是牺牲一部分空间来换取读取速度也就是时间的方法。在这里插入一段结构体函数传参的内容以下代码为结构体初始化,使用自定义函数进行初始化,传递的时候使用了结构体地址。 struct S { int a; char c; double d; }; void init(struct S
匿名结构体类型只能调用一次,在创建的时候把名称创建之后,只能使用一次,特殊情况可能会使用。链表的错误写法这样在结构体中又嵌入了一个结构体,无法分辨清楚是哪一部分先创建的,所以是非法的。正确创建是在内部创建数据,再创建下一个节点的地址。结构体初始化计算结构体类型大小的方法gcc 编译器没有默认对齐数,成员大小就是对齐数 struct s3 { double d; char c; int a;
struct s { char name[20]; int age; }; int main() { int arr1[] = { 1,2,3,4,5 }; int arr2[5] = { 0 }; struct s arr3[] = { {"张三",20} ,{"李四",18} }; struct s arr4[3]; memcpy(arr4, arr3, sizeof(arr
strncat的用法,注意要追加\0。int main() { //strncmp字符串比较函数 const char* p1 = "abcdef"; const char* p2 = "abcqwer"; int ret = strncmp(p1, p2, 3); printf("%d\n", ret); return 0; }int main() { char* p1 = "a
//1.计数器的写法 //2.递归的写法 //3.指针-指针 #include <assert.h> int my_strlen(const char* str) { int count = 0; assert(str != NULL); while (*str != '\0') { count++; str++; } return count; } int m
string,h下的库函数strcat(str1,str2)将str2的字符串追加到str1中,追加方式为查找\0strncat(str1,str2,6)将str2中的6个字符追加到str1中,不需要查找\0,可以同字符串追加。strstr(str1,str2)查找字符串,判断字符串str1中是否含有str2#define _CRT_SECURE_NO_WARNINGS 1 #include &
无符号char类型,只有4个字节,8位。打印成%d时发生了整型提升,出现了补位和丢位现象大端字节序存储模式,高位在低地址处存储小端字节序存储模式,高位在高地址处存储unsigned* char类型的字符指针解引用只能访问一个字节strlen函数表示计算字符串大小,根据寻找\0来计算,而char类型只能存放0-255个数字,或者-128到127。而找到0之后strlen就结束了计算。根据条件编写程序
&aa拿到二维数组的地址,+1跳过整个二维数组,强制转换为整型指针,放到ptr1中,*(ptr-1)则为10aa为二维数组首元素也就是首个一维数组的地址,aa+1为第二个一维数组的地址,解引用再强制转换为整型指针,放入ptr2中,ptr2-1指向元素5,解引用就是5char* a[]为应该指针数组,数组里面放有三个指针指向三个字符数组,将指针数组a的地址赋给二级指针pa,pa++,pa本身
整型数组sizeof数组名是首元素的地址sizeof(数组名),数组名表示的整个数组,计算的是整个数组的大小,单位是字节&数组名,数组名表示整个数组字符数组sizeof字符数组strlensizeof计算的是类型大小,并不参与计算,括号内只需要填入类型strlen计算字符串长度,寻找\0来结束计算,若为没有\0的字符数组,则计算为随机值,strlen需要填入的是地址,从该地址处
指向数组的首元素地址的指针,解引用并再进行调用操作*pa == arrp == arr二维数组传参,可使用数组指针,指向第一个一维数组int (*) [5] 数组指针类型数组,指针数组,数组指针,每个元素是数组指针的数组以上全部都是ok,二维数组arr【3】【5】,中arr为第一个一维数组的地址故可以使用int *arr,指针类型接收也可以使用指针数组接收一维
函数在操作,在栈上进行,形参的拷贝和函数的运行,基本上都在栈上完成,所以结构体的传参,对栈区的资源消耗较大。而传地址的操作则会节省栈区资源,不需要形参的拷贝过程,而是直接寻址。#define _CRT_SECURE_NO_WARNINGS 1 #include "stdio.h" struct T { char t; char s; }; typedef struct Stu { char
ESP8266连接路由器网络,进行控制,在中断中进行处理操作/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main
/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ***************
使用cubmax和hal库开发/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body
材料:振动传感器,喇叭,12V电源,LC126MAX无线接收模块,配套发射模块,继电器,单片机在中断中创建简易的响应系统,无主函数,基于HAL库创建,使用CUBMAX创建工程代码mian.c/* USER CODE BEGIN Header */ /** **********************************************************************
main.c #include "main.h" #include "gpio.h" #define KEY_ON 0 #define KEY_OFF 1 uint8_t Key_Scan(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) { if(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) == GPIO_PIN_RESET)
基于Ncurse图形库的C语言小游戏 。涉及到,C变量,流程控制,函数,指针,结构体等知识内容,动态链表的创建和插入, 以及释放。数组的遍历,#include <stdlib.h> #include <curses.h> #define ROW 20 #define COL 20 #define ROW_Snake 2 #define COL_Snake 2 #de
函数指针,数组指针,指针数组,指向函数指针数组的指针,函数指针数组6题(*(char**(*)(char**,char**))0)(char**,char**)把0强制转换为函数地址指向某个函数,并解引用进行使用,改变函数地址,操作内存,减少内存浪费函数指针,回调函数数组元素排序,结构体排序#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h
数据的创建,前插后插,遍历,计数,动态内存开辟动态创建等#include <stdio.h> #define dedata 8 struct Test { int data; struct Test *next; }; void Printlink(struct Test *point) { //struct Test *point; //point = head; i
指针数组数组指针函数指针二维数组传参函数指针传参函数指针解引用,调用指向函数指针的指针#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> /* int main() { int arr[5];//arr是一个5个元素的整型数组 int* parr1[10];//parr1是一个数组,数组有10个元素,每个元素的类型都是int*,
大小端存储不同类型的整型提升int类型和folat类型在内存中的存储方式#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> //int main()//判断是大端存储方式还是小段存储方式 //{ // //大端存储模式是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中 // //小端存储模式是指数据的高位保存在内存
my strlen计算字符串长度my strcpy拷贝字符串const的用法,保护右侧内容不被改动,与指针的妙用,(既不让女朋友花钱,也不让其换男朋友)int num = 10; const int* const pa = #//既不让女朋友花钱,也不让其换男朋友assert()断言的用法,优化程序#define _CRT_SECURE_NO_WARNINGS 1 #include <std
扫雷小游戏test.c#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" void menu() { printf("************************************\n"); printf("************ 1.Play **************\n"); printf("************
代码里面有一个小bug,看大家能不能发现text.c#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" //三字棋游戏 #include <stdio.h> void menu() { printf("************************************\n"); printf("**
void bubble_sort(int arr[],int sz) { int i = 0; for (i = 0; i < sz-1; i++) { int flag = 1;//假设本次需要排序的数据已经有序 int j = 0; for (j = 0; j < sz-1-i; j++) { if (arr[j] > arr[j
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> //int main() //{ // int a; // int b; // printf("请输入两个整数:\n"); // scanf("%d%d", &a, &b); // float c = (float)a / b; // print
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号