C语言基本知识

基础

存储类

auto:用完即丢。其实就是局部变量。

static:本文件的全局变量。

extern:只声明,不定义,引用外部变量。

register:放在寄存器而不是内存。

//auto
{auto int month;	//   等于int mount;
}//register
{register int  miles;
}//static
static int count=10;        /* 全局变量 - static 是默认的 */
int main(){}

extern实例

//文件add.cpp
extern int x;
extern int y;
int add(){return x+y;
}//文件test.cpp
#include <stdio.h>
int x = 2;
int y = 5;
extern int add();	//不用extern也可以
int main(){int z = add();printf("%d\n",z);
}//cmd下
$ gcc add.cpp test.cpp -o sum
//返回结果
$ sum		//区别extern
extern int a;     // 声明一个全局变量 a
extern int a =0;  // 定义一个全局变量 a 并给初值。一旦给予赋值,一定是定义,定义才会分配存储空间

static保存在内存的全局存储区中,静态存储器,生命周期直至程序结束;

局部变量auto保存在中,只有在所在函数被调用时才动态地为变量分配存储单元。

tip:静态存储器:常量,全局变量。

常量

整数、浮点数、字符、字符串(字符串常量以‘\0’或者null结尾)。

定义常量define或者const修饰:define只是进行文本替换,const用于只读变量,会为其分配内存(不会为常量分配内存),还可以捕获一些潜在的错误。所以建议使用const

3.14159       /* 合法的 */
314159E-5L    /* 合法的 *///浮点数==整数+小数。科学计数法==小数+指数
510E          /* 非法的:不完整的指数 */
210f          /* 非法的:没有小数或指数 */
.e55          /* 非法的:缺少整数或分数 */// 等效
char *s1 = "helloworld";
char *s2 = "hello""world";
char *s3 = "hello" "world";

数据类型

基本数据类型,指针,构造(数组、结构、枚举、共用),空。

整形数据根据编译环境的不同,所取范围不同。

浮点数

float总共32位。24位:符号+底数。8位:指数(偏移值为+127)。

#include <float.h>
printf("%e\n",FLT_MIN) ;	//1.175494e-038
printf("%e\n",FLT_MAX) ;	//3.402823e+038  // 等效均为9
int n2 = '\11';	
int n2 = 011;	

运算符

算数、逻辑、位、关系、赋值。杂运算符:sizeof()、&(取地址)、*(指向一个变量)、?:。

优先级:后缀((),->,++/–),单目(!/sizeof/++/–),算数,移位,大小关系,相等关系。位运算,逻辑运算。三元,赋值,逗号。

格式化输出

修饰符说明例子,输出格式
%-2d表示左对齐,并且占用两个字符位置
%.2f
%e %E科学计数法f1 = 3.141593e+07, f2 = 3.141593e+00
%g

格式字符,转义字符,普通字符。格式修饰符。g和G?l和L?h?%.ns表示?%-m.nf表示什么意思?

枚举

枚举类型是被当做 int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的。不过在一些特殊的情况下,枚举类型必须连续是可以实现有条件的遍历。

//不可以遍历
enum
{ENUM_0, ENUM_10 = 10, ENUM_11
};//可以遍历。默认MON是0,但是这里赋值为1
enum DAY
{MON=1, TUE, WED, THU, FRI, SAT, SUN
}day;
int main()
{// 遍历枚举元素for (day = MON; day <= SUN; day++) {printf("枚举元素:%d \n", day);}
}

指针

指针的含义。&*

函数指针

函数指针:一个指向函数的指针int (*p)(int,int) = fun

//函数指针
int max(int a,int b){ return a>b?a:b; }
int main(){int (*p)(int,int) = &max;//&可以不写 p(1,2);		//等价max(1,2) return 0;
}

回调函数

populate_array() 将调用 10 次回调函数,并将回调函数的返回值赋值给数组。

void populate_array(int *array,size_t length,int (*getValue)()){for(int i=0 ; i<length ; i++){*(array+i) = getValue();	//这里}
}int getRandom(){ return rand(); }	//回调函数int main(){int array[10];//getRandom不能加括号否则无法编译,因为加上括号之后相当于传入此参数时传入了 int,而不是函数指针populate_array(array,10,getRandom);//此时for输出arrayreturn 0;
}//size_t 是一种数据类型,近似于无符号整型,但容量范围一般大于 int 和 unsigned。这里使用 size_t 是为了保证 arraysize 变量能够有足够大的容量来储存可能大的数组。

字符串

\0 是用于标记字符串的结束

#include <string.h>
char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};
char site[] = "RUNOOB";
char site[6] = {'R', 'U', 'N', 'O', 'O', 'B'};//如果当作字符串输出会乱strcpy(s1, s2);	//复制字符串 s2 到字符串 s1。
strcat(s1, s2); //连接字符串 s2 到字符串 s1 的末尾。catenate 
strlen(s1);		//返回字符串 s1 的长度。
strcmp(s1, s2);	//如果 s1 和 s2 是相同的则返回0如果 s1<s2 则返回小于0;如果 s1>s2 则返回大于 0。
strchr(s1, ch);	//返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
strstr(s1, s2);	//返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
strupr(s1);
strlwr(s1);

结构体

定义结构体:

#1
//声明了结构体变量s1
struct{int a;char b;double c;
} s1;#2
struct SIMPLE{int a;char b;double c;
};
//用SIMPLE标签的结构体,另外声明了变量t1、t2、t3
struct SIMPLE t1, t2[20], *t3;#3
//也可以用typedef创建新类型
typedef struct Simple2{int a;char b;double c;
};
//现在可以用Simple2作为类型声明新的结构体变量
Simple2 u1, u2[20], *u3;struct Books{char  title[50];char  author[50];char  subject[100];int   book_id;
} book = {"C 语言", "RUNOOB", "编程语言", 123456};

实例:

struct Person {char name[20];int age;float height;
};int main() {struct Person person;printf("结构体 Person 大小为: %zu 字节\n", sizeof(person));return 0;
}

使用 sizeof 运算符来获取 person 结构体的大小,结构体的大小可能会受到编译器的优化和对齐规则的影响。了解结构体的内存布局和对齐方式,可以使用 offsetof 宏和 _attribute_((packed)) 属性等进一步控制和查询结构体的大小和对齐方式。

共用体

定义


union Data
{int i;float f;char  str[20];
} data1;union Data data2; 	//sizeof(data2) = 20,会采用共用体中最大的元素作为对象的大小 

如果其中对象的一个元素被赋值,其他的元素都会受到损害。共用体用于多个元素只会用其中的一种情况,比如传递信息的包(只会传递一种包)。

位域

位域bit-field是结构体中特殊的成员,指定成员占用多少bit,位域的宽度不能超过其数据类型的大小。

/* 定义简单的结构 */
struct
{unsigned int a;unsigned int b;
} status1;		//sizeof(status1)=8/* 定义位域结构 */
struct
{unsigned int a : 1;	//指定a占用1bit,也就是a只能为0或者1unsigned int b : 1;	//指定b占用1bit
} status2;		//sizeof(status2)=4//一个位域存储在同一个字节中,如一个字节所剩空间不够存放另一位域时,则会从下一单元起存放该位域。也可以有意使某位域从下一单元开始。
struct
{char a : 2;char b : 3;char c : 3;
} status3;		//sizeof(status3)=1//位域可以是无名位域,这时它只用来作填充或调整位置。无名的位域是不能使用的。
struct k{int a:1;int  :2;    /* 该 2 位不能使用 */int b:3;int c:2;
};

结构体内存分配原则

原则一:元素根据自己的整数倍进行存储。

原则二:struct的大小为元素(最占空间)的倍数。

typedef

自定义类型。

//C语言中没有byte的数据类型
typedef unsigned char byte;
byte a = 1;typedef struct Books
{char  title[50];char  author[50];char  subject[100];int   book_id;
} Book;
Book book;

typedef区别#define:(typedef定义类型,define文本替换)

  • typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
  • typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。
//#define可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。
#define INTERGE int;
unsigned INTERGE n;  //没问题
typedef int INTERGE;
unsigned INTERGE n;  //错误,不能在 INTERGE 前面添加 unsigned#define PTR_INT int *
PTR_INT p1, p2;        //p1、p2 类型不相同,宏展开后变为int *p1, p2;
typedef int * PTR_INT
PTR_INT p1, p2;        //p1、p2 类型相同,它们都是指向 int 类型的指针。

输入 & 输出

int scanf(const char *format, …)int printf(const char *format, …)

int getchar(void)int putchar(int c)

**char *gets(char s)int puts(const char s)

C 语言把所有的设备都当作文件。所以设备(比如显示器)被处理的方式与文件相同。以下三个文件会在程序执行时自动打开,以便访问键盘和屏幕。

标准文件文件指针设备
标准输入stdin键盘
标准输出stdout屏幕
标准错误stderr您的屏幕
#1:
int getchar(void); //从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。您可以在循环内使用这个方法,以便从屏幕上读取多个字符。
int putchar(int c); // 函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。您可以在循环内使用这个方法,以便在屏幕上输出多个字符。int c = getchar();
putchar(c);#2:
char *gets(char *s); //函数从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF。读取的换行符被转换为null值,做为字符数组的最后一个字符,来结束字符串。gets函数由于没有指定输入字符大小,如果很大会越界。
int puts(const char *s); //函数把字符串 s 和一个尾随的换行符写入到 stdout。char str[100];
gets(str);
puts(str);#3:
scanf()printf() 函数#4:
fgets函数原型:char *fgets(char *s, int n, FILE *stream);我们平时可以这么使用:fgets(str, sizeof(str), stdin);取代gets(),原因gets()易越界char str[5];
fgets(str, sizeof(str), stdin);
fputs(str,stdout);

文件读写

FILE *fopen( const char *filename, const char *mode );

r打开一个已有的文本文件,允许读取文件。
w打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+打开一个文本文件,允许读写文件。
w+打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

如果是二进制"rb", “wb”, “ab”, “rb+”, “r+b”, “wb+”, “w+b”, “ab+”, “a+b”。

函数介绍:(错误返回EOF)

int fputc( int c, FILE *fp );
int fputs( const char *s, FILE *fp );
int fprintf(FILE *fp,const char *format, ...) 
int fgetc( FILE * fp );
char *fgets( char *buf, int n, FILE *fp );	//读取n-1,因为最后要有'\0'。遇到换行即停
int fscanf(FILE *fp, const char *format, ...) 	//遇到空格换行即停。

实验

#include <stdio.h>int main()
{FILE *fp = NULL;fp = fopen("C:\\tmp\\test.txt", "w+");fprintf(fp, "This is testing for fprintf...\n");fputs("This is testing for fputs...\n", fp);fclose(fp);
}#include <stdio.h>int main()
{FILE *fp = NULL;char buff[255];fp = fopen("C:\\tmp\\test.txt", "r");fscanf(fp, "%s", buff);printf("1: %s\n", buff );fgets(buff, 255, (FILE*)fp);printf("2: %s\n", buff );fgets(buff, 255, (FILE*)fp);printf("3: %s\n", buff );fclose(fp);}
//输出
1: This
2: is testing for fprintf...3: This is testing for fputs...

实验

int fseek(FILE *stream, long offset, int whence);文件中光标偏移

whence有

#include <stdio.h>
int main(){   FILE *fp = NULL;fp = fopen("test.txt", "r+");  // 确保 test.txt 文件已创建fprintf(fp, "This is testing for fprintf...\n");   fseek(fp, 10, SEEK_SET);if (fputc(65,fp) == EOF) {printf("fputc fail");   }   fclose(fp);
}#打开test.txt
This is teAting for fprintf...

预处理器

C Preprocessor简写为CPP

指令描述
#define定义宏
#include包含一个源代码文件
#undef取消已定义的宏
#ifdef如果宏已经定义,则返回真
#ifndef如果宏没有定义,则返回真
#if如果给定条件为真,则编译下面代码
#else#if 的替代方案
#elif如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码
#endif结束一个 #if……#else 条件编译块
#error当遇到标准错误时,输出错误消息
#pragma使用标准化方法,向编译器发布特殊的命令到编译器中。pragma“注释”

实例

//取消定义,并重新定义
#undef  FILE_SIZE
#define FILE_SIZE 42//ifdef---endif
#ifndef MESSAGE#define MESSAGE "You wish!"
#endif

内置的宏定义

#include <stdio.h>main()
{printf("File :%s\n", __FILE__ );		printf("Date :%s\n", __DATE__ );printf("Time :%s\n", __TIME__ );printf("Line :%d\n", __LINE__ );		//__LINE__当前行号printf("ANSI :%d\n", __STDC__ );		//__STDC__,当编译器以ANSI编译器时,为1}

实例

//'\'表示宏延续运算符,'#'字符串常量化运算符。宏定义中printf如果被大括号括,则需要在末尾有分号
#define  message_for(a, b)  \printf(#a " and " #b ": We love you!\n")
int main(void){message_for(Carole, Debra);return 0;
}
//输出
Carole and Debra: We love you!//'##'标记粘贴运算符
#define tokenpaster(n) printf ("token" #n " = %d", token##n) 
int main(void){int token34 = 40;tokenpaster(34);return 0;
}

头文件

include <> 和 include ""区别。

有条件引用

#if SYSTEM_1# include "system_1.h"
#elif SYSTEM_2# include "system_2.h"
#elif SYSTEM_3...
#endif//需要指定在不同的操作系统上使用的配置参数。
#if SYSTEM_1# include "system_1.h"
#elif SYSTEM_2# include "system_2.h"
#elif SYSTEM_3...
#endif//有条件引用
#define SYSTEM_H "system_1.h"
...
#include SYSTEM_H//global.h包含所有头文件,以后直接引用global.h即可
#ifndef _GLOBAL_H#define _GLOBAL_H
#endif 
#include <fstream>
#include <iostream>
#include <math.h>

强制类型转换

char/short → int → unsigned → long → double ← float

错误处理

errno、perror()、strerror()、可以直接使用 stderr 文件流

#include <stdio.h>
#include <errno.h>
#include <string.h>extern int errno;int main(){FILE *fp = fopen("unexist.ext","rb");if(fp == NULL){perror("打开错误\n");fprintf(stderr,"---%s",strerror(errno));}else{fclose(fp);}return 0;
} 
//输出
打开错误
: No such file or directory
---No such file or directory

实例

//退出程序时返回状态。EXIT_FAILURE和EXIT_SUCCESS是宏定义,分别是-1和0
#include <stdio.h>
#include <stdlib.h>main()
{int dividend = 20;int divisor = 5;int quotient;if( divisor == 0){fprintf(stderr, "除数为 0 退出运行...\n");exit(EXIT_FAILURE);}quotient = dividend / divisor;fprintf(stderr, "quotient 变量的值为: %d\n", quotient );exit(EXIT_SUCCESS);
}

可变参数

实例

va_list ;	//stdarg.h中的类型
va_start(ap, last_arg)	//ap为va_list,last_arg表示最后一个可变参数。ap指向可变参数的第一个元素
va_arg(ap, type)	//可变参数的下一个参数
va_end(ap)			//结束,ap置空#include <stdio.h>
#include <stdarg.h>
float fun_average(int num,...){va_list valist;va_start(valist,num);float sum = 0;for(int i=0; i<num ; i++){sum += va_arg(valist,int);}va_end(valist);return sum/num;
} 
int main(){	printf("%f\n",fun_average(3,5,6,7));printf("%f\n",fun_average(4,5,6,7,8));return 0;
}

内存管理

函数均在stdlib.h文件中

1void *calloc(int num, int size); 在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是 0。c表示clear
2void free(void *address); 该函数释放 address 所指向的内存块,释放的是动态分配的内存空间。
3void *malloc(int num); 在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。
4void *realloc(void *address, int newsize); 该函数重新分配内存,把内存扩展到 newsize

实例

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main(){char *p;p = (char*)malloc(5*sizeof(char));if(p == NULL){fprintf(stderr,"---1stderr");}else{strcpy(p,"1234");}printf("%s\n",p);p = (char*)realloc(p,10*sizeof(char));if(p==NULL){fprintf(stderr,"---2stderr");}else{strcat(p,"12345");}printf("%s\n",p);free(p);return 0;	}

命令行参数

#include <stdio.h>int main( int argc, char *argv[] )  
{if( argc == 2 ){printf("The argument supplied is %s\n", argv[1]);}else if( argc > 2 ){printf("Too many arguments supplied.\n");}else{printf("One argument expected.\n");}
}//执行。argv[0]存储程序的名字,argv[1]存储第一个输入的参数
$./a.out testing
The argument supplied is testing$./a.out testing1 testing2
Too many arguments supplied.$./a.out
One argument expected$./a.out "testing1 testing2"Progranm name ./a.out
The argument supplied is testing1 testing2

例子

基础

#两整数相除任然是整数。
printf("%f",(float)(10/3));		//3.000000int *ptr;		//ptr:整型指针变量//后缀可以是大写,也可以是小写,U 和 L 的顺序任意。
0xFeeL      /* 合法的 */
0x4b       /* 十六进制 */
30u        /* 无符号整数 */
30l        /* 长整数 */
30ul       /* 无符号长整数 */#'\101'等价于0101
'\101', '\x41', 'A'	//三者等价

变量修饰符

//用循环函数检测使用时间
time_t start,end;
time(&start);fori;
time(&end);
printf("%ld",start-end);

函数

#add.c
#include <stdio.h>
/*外部变量声明*/
extern int x ;
extern int y ;
int add()
{return x+y;
}#test.c
#include <stdio.h>
/*定义两个全局变量*/
int x=1;
int y=2;
int add();
int main()
{printf(" %d\n",add());return 0;
}

拓展

编码

  1. ascii编码规则?常用字符?
  2. ANSI编码即扩展ascii编码。GB2312(94*94)三种编码方式、GBK用剩余的空间再进行编码、Big-5、JIS
  3. utf-8编码规则?

格式化输出

  1. 整形输出:%ld %o %x %u %5d %05d %-5d
  2. 小数输出:%20.15f %-20.15f %e %g
  3. 字符输出:%5c
  4. 指针输出:%p
  5. 格式修饰符:l、 L、h、m.n、-

visual stdio(vs)和vs code

两者都是microsoft下

vs:通俗的说是一个编译器。不可跨平台,是IDE,可以编译很多高级语言。

vs code:通俗的说是一个编辑器。可跨平台,超级文本编辑器。

vc(visual C++):编译器,只用于C/C++。

问题

  1. 静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。


/三者等价

变量修饰符```c
//用循环函数检测使用时间
time_t start,end;
time(&start);fori;
time(&end);
printf("%ld",start-end);

函数

#add.c
#include <stdio.h>
/*外部变量声明*/
extern int x ;
extern int y ;
int add()
{return x+y;
}#test.c
#include <stdio.h>
/*定义两个全局变量*/
int x=1;
int y=2;
int add();
int main()
{printf(" %d\n",add());return 0;
}

拓展

编码

  1. ascii编码规则?常用字符?
  2. ANSI编码即扩展ascii编码。GB2312(94*94)三种编码方式、GBK用剩余的空间再进行编码、Big-5、JIS
  3. utf-8编码规则?

格式化输出

  1. 整形输出:%ld %o %x %u %5d %05d %-5d
  2. 小数输出:%20.15f %-20.15f %e %g
  3. 字符输出:%5c
  4. 指针输出:%p
  5. 格式修饰符:l、 L、h、m.n、-

问题

  1. 静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/68781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用批处理文件清除系统垃圾

第一步&#xff1a;打开记事本&#xff0c;里面的命令如下 echo off echo 正在清理临时文件&#xff0c;请稍候...:: 清理系统临时文件 echo 清理系统临时文件... del /q /f /s "%TEMP%\*.*" del /q /f /s "%WINDIR%\Temp\*.*" rd /s /q "%WINDIR%\T…

Linux——信号量和(环形队列消费者模型)

Linux——线程条件变量&#xff08;同步&#xff09;-CSDN博客 文章目录 目录 文章目录 前言 一、信号量是什么&#xff1f; 二、信号量 1、主要类型 2、操作 3、应用场景 三、信号量函数 1、sem_init 函数 2、sem_wait 函数 3、sem_post 函数 4、sem_destroy 函数 ​​​​​​…

垂直供排水抢险车:守护城市,抗击洪涝|深圳鼎跃

我国面积幅员辽阔&#xff0c;其灾害种类多样&#xff0c;而洪涝灾害是其中最常见的灾害&#xff0c;其容易受强降雨的影响&#xff0c;严重影响人民群众的日常生活。而在洪水肆虐的场景中&#xff0c;快速、高效地排涝和供水是防止次生灾害、保护人民生命财产安全的关键环节。…

Social LSTM:Human Trajectory Prediction in Crowded Spaces | 文献翻译

概要 行人遵循不同轨迹以避免障碍物和容纳同行者。任何在这种场景中巡航的自动驾驶车辆都需要能够遇见行人的未来位置并相应地调整其路线以避免碰撞。轨迹预测问题能够被看作一个顺序生成任务&#xff0c;其中我们对基于行人过去的位置预测其未来的轨迹感兴趣。根据最近RNN&am…

React+AntDesign实现类似Chatgpt交互界面

以下是一个基于React和Ant Design搭建的简单ChatGPT风格前端交互界面代码框架示例&#xff0c;该示例实现了基本的用户输入、发送请求以及展示回复的功能。假设后端有一个模拟接口来处理请求并返回回复。 1. 项目初始化&#xff1a; 确保你已经安装了Node.js和npm。通过以下命…

与“神”对话:Swift 语言在 2025 中的云霓之望

0. 引子 夜深人静&#xff0c;是一片极度沉醉的黑&#xff0c;这便于我与深沉的 macbook 悄悄隐秘于其中。一股异香袭来&#xff0c;恍惚着&#xff0c;撸码中身心极度疲惫、头脑昏沉的我仿佛感觉到了一束淡淡的微光轻洒在窗边。 我的对面若隐若现逐渐浮现出一个熟悉的身影。他…

iOS 网络请求: Alamofire 结合 ObjectMapper 实现自动解析

引言 在 iOS 开发中&#xff0c;网络请求是常见且致其重要的功能之一。从获取资料到上传数据&#xff0c;出色的网络请求框架能夠大大提升开发效率。 Alamofire 是一个极具人气的 Swift 网络请求框架&#xff0c;提供了便据的 API 以完成网络请求和响应处理。它支持多种请求类…

68,[8] BUUCTF WEB [RoarCTF 2019]Simple Upload(未写完)

<?php // 声明命名空间&#xff0c;遵循 PSR-4 自动加载规范&#xff0c;命名空间为 Home\Controller namespace Home\Controller;// 导入 Think\Controller 类&#xff0c;以便扩展该类 use Think\Controller;// 定义 IndexController 类&#xff0c;继承自 Think\Control…

【C++】引用(上)

1、引用的基本使用 作用&#xff1a;给变量起别名 语法&#xff1a;数据类型&#xff08;该数据类型要与原名的数据类型一致&#xff09; &别名原名&#xff1b; 示例&#xff1a; #include<iostream> using namespace std; int main() {int a 10;int& …

JDBC实验测试

一、语言和环境 实现语言&#xff1a;Java。 环境要求&#xff1a;IDEA2023.3、JDK 17 、MySQL8.0、Navicat 16 for MySQL。 二、技术要求 该系统采用 SWING 技术配合 JDBC 使用 JAVA 编程语言完成桌面应用开发。 三、功能要求 某电商公司为了方便客服查看用户的订单信…

外包公司名单一览表(成都)

大家好&#xff0c;我是苍何。 之前写了一篇武汉的外包公司名单&#xff0c;评论区做了个简单统计&#xff0c;很多人说&#xff0c;在外包的日子很煎熬&#xff0c;不再想去了。 有小伙伴留言说有些外包会强制离职&#xff0c;不行就转岗&#xff0c;让人极度没有安全感。 这…

一些硬件知识【2025/1/21】

小米2K摄像头拆解&#xff1a; 这种小转接板空余部分一般全部打上过孔&#xff1a; 摄像头下面的SENSOR,这一部分才是摄像头的核心&#xff1a; 干硬件多久跳槽一次比较合适&#xff1f;3年跳一次可以吗&#xff1f; eMCC存储芯片外面那一圈焊盘是做什么用的&#xff1f; 没有…

WPF实战案例 | C# WPF实现计算器源码

WPF实战案例 | C# WPF实现计算器源码 一、设计来源计算器应用程序讲解1.1 主界面1.2 计算界面 二、效果和源码2.1 界面设计&#xff08;XAML&#xff09;2.2 代码逻辑&#xff08;C#&#xff09;2.3 实现步骤总结 源码下载更多优质源码分享 作者&#xff1a;xcLeigh 文章地址&a…

【HBuilderX 中 Git 的使用】

目录&#xff1a; 一&#xff1a;安装必要的版本控制工具二&#xff1a;把Github上的项目克隆到本地三&#xff1a;将本地的项目上传到Github上 一&#xff1a;安装必要的版本控制工具 1️⃣ 安装 TortoiseGit 工具&#xff0c;下载地址&#xff1a;https://tortoisegit.org/do…

浅谈 JVM

JVM 内存划分 JVM 内存划分为 四个区域&#xff0c;分别为 程序计数器、元数据区、栈、堆 程序计数器是记录当前指令执行到哪个地址 元数据区存储存储的是当前类加载好的数据&#xff0c;包括常量池和类对象的信息&#xff0c;.java 编译之后产生 .class 文件&#xff0c;运…

OpenCV简介、OpenCV安装

OpenCV简介、OpenCV安装 本文目录&#xff1a; 零、时光宝盒 一、OpenCV简介 二、OpenCV图像处理基础知识 三、OpenCV-Python环境安装 2.1、纯python环境下安装OpenCV 2.2、Anaconda管理环境下安装 OpenCV 四、如何用OpenCV 中进行读取展示图像 五、OpenCV读取图像、显…

使用Chrome和Selenium实现对Superset等私域网站的截图

最近遇到了一个问题&#xff0c;因为一些原因&#xff0c;我搭建的一个 Superset 的 Report 功能由于节假日期间不好控制邮件的发送&#xff0c;所以急需一个方案来替换掉 Superset 的 Report 功能 首先我们需要 Chrome 浏览器和 Chrome Driver&#xff0c;这是执行数据抓取的…

算法专题(三):二分查找

本篇还是像之前一样&#xff0c;以举例子的形式向大家讲解&#xff01;每道题的题目均是传送门&#xff01;点击跳转对应题&#xff01; 目录 一、二分查找 1.1 题目 1.2 思路 1.3 代码实现 总结&#xff08;模版&#xff09; 朴素版&#xff1a; 二、在排序数组中查找…

在k8s中部署一个可外部访问的Redis Sentinel

1.前提条件&#xff1a; 1.部署了multus 想要k8s外部能访问k8s内部的redis&#xff0c;redis-server启动时必须使用multus的IP 2.helm客户端安装 2.开始安装 准备3个multus ip 10.10.10.130 10.10.10.131 10.10.10.132 apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttac…

使用tritonserver完成clip-vit-large-patch14图像特征提取模型的工程化。

1、关于clip-vit-large-patch14模型 关于openapi开源的clip-vit-large-patch14模型的特征提取&#xff0c;可以参考之前的文章&#xff1a;Elasticsearch向量检索需要的数据集以及768维向量生成这篇文章详细介绍了模型的下载地址、使用方式、测试脚本&#xff0c;可以让你一步…