C语言
冬竹️
一个正在努力学习的小白
展开
-
C语言中的共用体
共用体什么是共用体修改其中一个共用体变量的值,其他的也会被改变,因为它们所用的空间是一样的。#include "stdio.h"union data{ int n; char ch; short m;};void main(){ union data a; //原本是要占用7个字节,int 4 + char 1 + short 2 = 7 //共用体以占用最大空间的数据类型大小为准(共享空间) printf("%d",sizeof(a原创 2021-07-30 14:41:59 · 148 阅读 · 0 评论 -
C语言动态内存分配
动态内存分配内存分配范围全局变量–>静态存储区非静态的局部变量 -->栈临时使用的数据,用完了要及时清理–>堆(动态存储区)相关函数malloc、calloc、realloc称为无类型指针,也就是void类型,它不指向任何数据,只是存着一个地址,不能通过*pointer取出地址中的内容。//在堆中分配一个长度为size的连续空间void *malloc(unsigned int size)malloc(100);//开辟100字节的临时空间,返回值为其第一个字节的地址原创 2021-07-30 09:54:43 · 74 阅读 · 0 评论 -
C语言中的回调函数
回调函数介绍函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。简单的讲:别的方法调用了传入的函数(通过函数指针完成)。案例使用回调函数的方式,给一个整型数组int arr[10]赋10个随机数。#include "stdio.h"#include "stdlib.h"void initArray(int *array, int arraySize, int (*function)()) { for (int i = 0; i < arr原创 2021-07-29 17:45:41 · 137 阅读 · 0 评论 -
C语言中函数指针
#include "stdio.h"int max(int a, int b) { return a > b ? a : b;}void main() { int x, y, maxVal; /** * 第一个int:返回值类型 * *pmax:函数名称 * 第二、三个int:形参列表类型 * = max:指向max这个函数 */ int (*pmax)(int, int) = max; x = 1原创 2021-07-29 16:12:34 · 57 阅读 · 0 评论 -
C语言函数返回指针的注意事项
用指针作为函数返回值时需要注意,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量、局部数组和形式参数,函数返回的指针不能指向这些数据函数运行结束后会销毁该函数所有的局部数据,这里所谓的销毁并不是将局部数据所占用的内存全部清零,而是程序放弃对它的使用权限,后面的代码可以使用这块内存(个人理解为:销毁后内存还有这个数据,但是后续代码使用到这个空间的时候它的空间将会被占用0)。c语言不支持在调用函数时返回局部变量的地址,如果确实有这样的需求,需要定义局部变量为static变量(存放在静态数据区,.原创 2021-07-29 15:47:16 · 1542 阅读 · 0 评论 -
C语言多重指针
二级指针中存的是一级指针的地址,不是一级指针中存的地址。再往上三级指针中存储二级指针的地址,以此类推。原创 2021-07-29 15:05:48 · 176 阅读 · 0 评论 -
C语言指针数组
指针数组的地址也是每次 + 数组类型字节数。原创 2021-07-29 13:43:24 · 45 阅读 · 0 评论 -
C语言指针的比较
void mian(){ int var[] = {10,20,30}; int *p; p = var; //p指向var[0]的地址 if(p == var[0]){//不能比较,p是pointer,var[0]是int } if(p == &var[0]){//可以比较,地址与地址 } if(p == var){//可以比较,var指向的也是地址 } if(p >= &var[1]){//可以比较,返回false,因为&var[1]是前者原创 2021-07-29 10:08:09 · 741 阅读 · 2 评论 -
C语言指针算数运算
算数运算++与- -# include "stdio.h"const int MAX = 3;void main(){ int var[] = {10,100,200}; int *ptr; ptr = var; for (int j = 0; j < MAX; ++j) { printf("var[%d]地址=%p \n",j,ptr); printf("存储值:var[%d]=%d\n",j,*ptr);原创 2021-07-29 09:58:40 · 79 阅读 · 0 评论 -
二维数组内存分布(C语言)
C语言中二维数组的地址排列是:int a[4][6];a,a[0][0]都指向数组的第一个地址后续的地址,如a[0][1]的地址分布是原地值 + 数据类型所占字节数,这里是int,4个字节,(第一个数组的地址)003CFECO + (int占四个字节)4 = (第二个数组的地址)003CFEC4。以此类推,后面的数组元素都是这么算下来的。...原创 2021-07-29 08:22:06 · 1735 阅读 · 0 评论 -
二分查找(C语言)
#include "stdio.h"int binarySearch(int arr[], int leftIndex, int rightIndex,int findNum) { //找到中间值的坐标 int midIndex = (leftIndex + rightIndex) / 2; //在被递归调用时,左坐标(leftIndex)大于右坐标(rightIndex),说明没有这个值 if(leftIndex > rightIndex){ .原创 2021-07-28 16:34:33 · 57 阅读 · 0 评论 -
冒泡排序(C语言)
//// Created by Keeper on 2021/7/28.//#include<stdio.h>void main() { //冒泡排序,从小到大(从左到右将相邻的两个数进行比较,如果前者大于后者,则将两个交换位置,每比较一次能确定一个当前最大值) //原始数组 int arr[] = {3, 9, -1, 10, -2}; //存储原始数据的变量 int temp = 0; //得到数组的长度 int len原创 2021-07-28 15:21:36 · 80 阅读 · 0 评论 -
C语言中的一维数组与字符串
一维数组概念在c语言中,字符串实际上是使用null字符("\0’)终止的一维字符数组。因此,一个以null结尾的字符串,包含了组成字符串的字符。图解当数组长度大于字符的长度时,字符后面一格自动添加"\0",遇到"\0"表示该字符串自动结束。后面的内容将不会被输出。当数组长度等于字符的长度时,后面不会添加"\0",会将后面的位置字符也输出出来,直到遇到"\0"结束。当书写格式为:char str[] = "abcd";这一类型的时候,系统会自动在末尾加上"\0",如果写成char s原创 2021-07-28 14:01:41 · 934 阅读 · 0 评论 -
C语言宏定义
宏定义:用一个标识符表示一个字符串,在预处理(编译前)将标识符替换为这个字符串。#defind N 100*10void main(){ int sum = 1 + N;}在编译之前会变成:void main(){ int sum = 1 + 100*10;}只是将定义的字符串替换了这个标识符(N)。...原创 2021-07-27 09:31:04 · 64 阅读 · 0 评论 -
C常用的函数
#include <stdio.h>#include <string.h>#include <time.h>void main() { /** *字符常用函数 <string.h> */ char str[50] = "abc"; printf("字符长度:%d",strlen(str)); //获取字符长度 strcpy(str,"hello");//复制后面的字符常量给str,会覆盖原先的内容原创 2021-07-27 08:26:36 · 51 阅读 · 0 评论 -
C程序内存布局图
原创 2021-07-23 10:00:26 · 101 阅读 · 0 评论 -
位运算与反码、补码、原码
位运算原码、反码、补码概念二进制的最高位是符号位:0表示正数,1表示负数正数的原码,反码,补码都一样(三码合一)负数的反码=它的原码符号位不变,其它位取反(0->1,1->O)负数的补码=它的反码+10的反码,补码都是0在计算机运算的时候,都是以补码的方式来运算的例题取反按位&右移...原创 2021-07-21 09:34:27 · 169 阅读 · 0 评论 -
进制转换规则
文章目录进制转换转十进制二进制转换成十进制八进制转十进制十六进制转十进制十进制转其他进制十进制转二进制十进制转八进制十进制转十六进制二进制转其他进制二进制转八进制二进制转十六进制其他进制转二进制八进制转二进制十六进制转二进制进制转换转十进制二进制转换成十进制八进制转十进制十六进制转十进制十进制转其他进制十进制转二进制十进制转八进制十进制转十六进制二进制转其他进制二进制转八进制二进制转十六进制其他进制转二进制八进制转二进制十六进制转二进制...原创 2021-07-21 08:49:53 · 123 阅读 · 0 评论 -
运算符优先级
运算符优先级从右向左赋值运算(=)条件运算符(表达式一?表达式2:表达式3)++与–所有双目运算中只有赋值运算符的结合方向是从右向左优先级的大概顺序算数运算符 > 关系运算符 > 逻辑运算符(逻辑非!除外) > 赋值运算符 > 逗号运算符...原创 2021-07-21 08:08:11 · 102 阅读 · 0 评论 -
C语言中const与#define的区别
文章目录视图和视图解析器forword(转发)redirect(重定向)视图解析流程视图和视图解析器有前缀的转发与重定向操作,配置的视图解析器(InternalResourceViewResolver)不会进行拼串。forword(转发)package cpm.atguigu.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.Req原创 2021-06-14 17:09:31 · 1442 阅读 · 0 评论 -
C语言值传递与地址传递
值传递概念将变量指向的存储内容,在传递/赋值时,拷贝一份给接收变量。范围整数、小数、字符(类型)案例int num = 100;int num2 = num;num2 = 40;解析【int num = 100;】num的地址为XXX,值为100。【int num2 = num;】拷贝num1的值100,将拷贝的100赋值给num2。3.【num2 = 40;】 num2的值改成40注意修改num2的值并不会影响到num,这两个在内存中指向的是不同的地址,只是内容一样。地原创 2021-07-19 16:36:35 · 1768 阅读 · 1 评论