c语言static加与不加的区别

问错了,编辑一下,我是想问为什么加了static之后输出的y全部是3,但是x的输出又是根据static的y的变化得到的?

我知道x+=y++的意思,x,y的定义写在函数外面是什么意思。

以及请问能否详细解释加和不加static的输出结果是怎么得到的,感谢。

#include <stdio.h>
int x = 0,y = 3;
void fun()
{
   // static int y = 1;
    x+=y++;
}

void main()
{
    int i;
    for(i = 1; i < 4; i++)
    {
        fun();
        printf("%d,%d\n",x,y);
    }
}

11个回答

我明白楼主的问题,首先我对楼主的代码做了一些更方便直观探索数据变化的修改,将不加static和加了之后的代码和结果呈现在这里:
不加static
加static
接下来一一回答楼主的问题:
为什么加了static之后输出的y全部是3,但是x的输出又是根据static的y的变化得到的?
看图二既打印了函数func1()内部y的值随后又打印了main()函数中的y值,一目了然,
加了static y = 1;这行代码之后,函数func1()中的静态变量y覆盖外面定义的全局变量y,
每次func1()中操作的都是它自己内部定义的占有固定存储位置的变量y,该值在函数func1()内部可见,并且累加,
然而离开该函数,便被外面的全局变量y所覆盖,所以main()函数打印的是全局的y,始终是3.

x,y的定义写在函数外面是什么意思
x,y写在函数外面表明这两个变量全局可见,超越函数代码段的限制,只要没有被覆盖可以在任何地方被修改,并保留修改后的值,一旦被覆盖,在覆盖到的代码段对其操作无效,操作的只是同名的段内覆盖定义。

详细解释加和不加static的输出结果是怎么得到的
我认为楼主就直接看我的两站加和不加的前后对比的附图足以能明白变量的变化过程和状态,第一个问题其实已经详细回答了加static的结果如何得到,不加static就更容易理解了,结合第二个问题的回答,因为不加的话它就纯粹是个全局变量,有没有别的定义覆盖它,一直被能修改的地方修改,并保留修改后的结果。

望采纳,谢谢

static 是静态变量,一般用在函数体里面
静态的意思是固定存储位置,在磁盘中存储位置一开始是哪,一直都是那。
这样的话,当下一次再访问这个变量时,它的值还是上一次修改过的。
也就是说按照一般的存储规则,先后两次进入函数,函数里的变量是会变的。但是由于静态变量有它单独、不会改变的存储地址,所以先后两次调用,变量值会是前一次的值。(只可以在定义时初始化,之后只可以访问修改,不再是初始化)

大家的是理论性的讲,我就通俗的解释吧:
1.使用static就表示次变量霸占了固定的存储位置,所以楼主这段代码加不加static和运算结果无关。
2.变量定义在函数里面,只能此函数使用;定义在外面,所有的函数都可以使用。

xy写在外面,在这个代码段里是相当于一个全局变量,y的作用域更广,3其实是x=y,然后y++,static自己去翻下书

如果在函数内定义了一个与外界重名的变量(y),那么局部变量会覆盖外界的变量,所以如果把那一行取消注释,就会出现这样的情况。

在函数外面定义变量,那么这个变量就是一个全局变量,所有函数可见,初始值默认为0。

(补充一个讲static的链接:https://www.cnblogs.com/JMatrix/p/8194009.html)

1:加了static后表示该函数失去了全局可见性,只在该函数所在的文件作用域内可见

2:当函数声明为static以后,编译器在该目标编译单元内只含有该函数的入口地址,没有函数名,其它编译单元便不能通过该函数名来调用该函数,这也是对1的解析与说明

static声明为静态的,此处y相当于全局变量,在fun()中被使用的也就是这个全局变量。
当在fun()内部再次定义static int y = 1时,此处y是局部变量,被声明为静态的。在fun外定义的全局变量y在这个函数内被屏蔽,虽然同名,但实际上是两个不同的变量

图片说明

--不加static时的y输出如上图所示,是累加后输出,依次为4、5、6,没有出现你说的“不加static的话输出的y全部是3”的现象啊!

--加上static的话,全局变量y,和fun()函数里的y,是两个不同的变量。所以,fun()函数里的累加操作,只作用于static变量;而printf输出的,一直是全局变量y,因此直输出3.

加static是全局作用域,不加的话因为你的函数体里面有临时变量y与外面的y重名了,这样函数内y++以后,出函数的时候,临时作用域的y生命周期结束,所以你的输出还是函数外面的y
简单的说你的y++操作是对函数内的y++,输出的是函数外的y。所以一直是3
如果对你有帮助,希望采纳,谢谢

x,y的定义写在函数外面是全局变量,你在函数内定义的y是局部变量,mian函数内有效的是全局变量。所以与你是否定义static无关,只是变量作用域的问题

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言 static定义变量的问题

static定义一个变量到底需不需要加上数据类型呢?这里没加也没出错 #include<stdio.h> int main() { int i; static a=1; for(i=0;i<5;i++) a=a+i; printf("%d\n",a); } ![图片说明](https://img-ask.csdn.net/upload/201710/15/1508049072_132357.png)

有哪位大佬能告诉我在C语言中 指针变量 可以被static修饰吗?

就是在C语言中可不可以有"static int* p ;"这种方式定义指针变量。 如果可以效果是不是跟正常的静态变量"static int a;"一样?

C语言的static全局变量有什么意义?

.h文件中的全局变量用了static修饰,但被其它文件包含后,这个static全局变量还是可以被其它文件访问,那我声明为static有什么意义? 怎样才能让我的头文件在被其它文件包含后其中的全局变量不被这个文件访问到?

static在函数声明的时候加还是函数定义的时候加

如题,我现在有一个函数先声明后定义的,程序能正常运行, 然后我想在这个函数前加上static,我试过只在声明的时候加, 只在定义的时候加,还有声明和定义的时候都加,都无法通过 编译,linux下c语言写的,我现在不想把这个函数的代码提到 前面去,就想要先声明后定义,而且要给它加上static,请问 该怎么解决?

在类内声明一个函数既用static又用inline在类外怎么实现

``` static inline double getTotal(); ``` 在类外要不要写static 和inline

C语言中unsigned的问题。

定义一个unsigned int a=4294967292u;请问最后的u有必要加吗? 如果我没有加,编译器警告 “[Warning] this decimal constant is unsigned only in ISO C90”这里有三个问题。 1.网上查了以后得知,c语言里面的常量默认是一个32位的有符号整型数 ,所以我很困惑我前面不是定义了unsigned int 了吗?为什么数据后面再加U?不是多此一举吗? 2.char a = 255; unsigned char b = 255; printf("a=%d,b=%d\n",a,b); 得到a=-1,b=255; 这里我想问char a = 255 内存中表示应该11111111B,又因为%d按照有符号整数来看所以输出a=-1, 呢么这里b内存中表示不是和a一样吗11111111B?也是%d输出啊 为什么变成255了。 3. 对比1为什么 unsigned char b = 255 后面不加U编译器不报WARNING? 难以自己解决,还是新手希望大神指点,跪谢

static bool 下面表达怎么理解呐 ?

static bool start_command(const AP_Mission::Mission_Command& cmd); 上面这段语句,静态布尔变量 tart_command括号里面的部分,怎么理解呐? const AP_Mission::Mission_Command& cmd

关于C语言中静态变量的存储地址释放问题

#include<stdio.h> int main() { static int a = 100; int *b = &a; printf("%d\n", b); return 0; } 静态变量不是应该使用以后不释放吗?为什么每次运行输出的地址都不一样

static 函数定义在头文件中有什么作用

static 函数定义在头文件中有什么作用?学渣求教,static 不就是要限制作用域吗?

关于C语言中的static变量的问题

下面的代码最终结果为什么是-10?去掉这个函数中的static则结果是-2可以理解,请教一下加了static后这个变量在函数的多次调用中是如何变化的 int fun() { static int a = 1; return ++a; } int main() { int b; b = fun()-fun()*fun(); printf("%d\n",b); return 0; }

C语言 静态变量自增怎么会突然变成int下限值?

``` #include <stdio.h> #include <stdlib.h> #include <time.h> #define Random(x) (rand()%x) #define ARR_LENGHT 6 // 为了方便,第零位不考虑 //int arr[ARR_LENGHT] = { 0,0,0,0,0,0,0,0,0,0,0 }; int arr[ARR_LENGHT] = { 0,0,0,0,0,0 }; int hs_compare_times = 0, hs_move_times = 0; int *key_word_loc; int left(int i) { return 2 * i; } int right(int i) { return 2 * i + 1; } void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; if (a == key_word_loc) { hs_move_times++; key_word_loc = b; } if (b == key_word_loc) { hs_move_times++; key_word_loc = a; } } void max_heapify(int *a, int i) { int l = left(i), r = right(i), largest; // 左孩子是否比i大 if (l <= ARR_LENGHT && a[l] > a[i]) largest = l; else largest = i; if (&a[l] == key_word_loc || &a[i] == key_word_loc) { hs_compare_times++; /*------------只出现在两个地方 1/2----------------*/ printf("####%d\n", hs_compare_times); } // 右孩子是否比i大 if (r <= ARR_LENGHT && a[r] > a[largest]) largest = r; if (&a[r] == key_word_loc) { hs_compare_times++; /*------------只出现在两个地方 2/2----------------*/ printf("****%d\n", hs_compare_times); } // 如果i不比它所有的孩子大,就将i下降一位,继续执行max_heapify(). if (largest != i) { swap(&a[largest], &a[i]); max_heapify(a, largest); } } void build_heap(int *arr) { // 从 (ARR_LENGHT - 1) / 2 是最后一个节点 // 建堆是忽略了第零个,所以进行到 i = 1 即可,所以i > 0. for (int i = (ARR_LENGHT - 1) / 2; i > 0; i--) { max_heapify(arr, i); } } // 删除的本质是将第一个赋上最小值。 // 总是删除第一个,arr_lenght是数组的长度。 void heap_remove(int *a) { a[1] = INT_MIN; build_heap(a); } // arr是原数组,arr_sort是排序后的数组 // 将arr的第1个赋给arr的第i个. void heap_sort(int *arr, int *arr_sort) { for (int i = 0; i < ARR_LENGHT - 1; i++) { arr_sort[i] = arr[1]; heap_remove(arr); } } int RunHeapSort() { int choice, i; int arr_sort[ARR_LENGHT - 1]; srand((unsigned)time(0)); printf("****************************************\n"); printf("已选择 堆排序\n"); printf("请选择输入模式:\n"); printf("1. 自动输入随机数\n"); printf("2. 手动输入数字\n"); printf("0. 返回上一级菜单\n"); printf("****************************************\n"); printf("请输入您的选择: "); scanf("%d", &choice); while (choice) { switch (choice) { case 1: hs_compare_times = 0; hs_move_times = 0; printf("原顺序为:\n"); for (i = 1; i < ARR_LENGHT; i++) { arr[i] = Random(100); printf("%2d ", arr[i]); } putchar('\n'); printf("关键字为:%d\n", arr[1]); key_word_loc = &arr[1]; build_heap(arr); heap_sort(arr, arr_sort); printf("排序后:\n"); for (i = ARR_LENGHT - 2; i >= 0; i--) printf("%2d ", arr_sort[i]); putchar('\n'); printf("比较了: %d\n", hs_compare_times); printf("交换了: %d\n", hs_move_times * 3); putchar('\n'); } printf("请输入您的选择: "); scanf("%d", &choice); } return 0; } ``` 我就写了一个堆排序,自增却会变成-2147483647,谁能帮我看看错在哪里..... 有几张截图。 ![图片说明](https://img-ask.csdn.net/upload/201610/17/1476700127_678921.png) ![图片说明](https://img-ask.csdn.net/upload/201610/17/1476700148_245856.png)

为什么static会改变呢?

``` #include<stdio.h> int main() { void fun(); int i; for(i=0;i<=3;i++){ fun(); } } void fun() { int i=0; static int static_i=0; printf("i=%d\n",i); printf("static_i=%d\n",static_i); i++; static_i++; } ```

static修饰变量和方法的区别

为什么对象可以调用静态变量而不能调用静态方法?一直没搞懂,我知道类方法,大神们请介绍下底层,跪谢

c语言中a+=b和a=a+b有什么区别

c语言中a+=b和a=a+b有什么区别,初学者求答案!不甚感激,

c语言图片的的复制问题

最近想用c语言写一个复制图片的小程序,用fread和fwrite,代码如下(控制台程序): #define BUFFER_SIZE 10*1024*1024 main() { FILE *out; FILE *fp; int length; static char buffer[BUFFER_SIZE]; fp = fopen("1.bmp", "rb"); out = fopen("out.bmp", "wb") fseek(fp, 0, SEEK_END); length = ftell(fp); fread(buffer, 1, length, fp); rewind(out); fwrite(buffer, 1, length, out); fclose(out); fclose(fp); } 程序运行后,out.bmp和1.bmp的大小一样,可是打不开,哪位大神帮忙看一下有什么问题吗

关于C语言基础概念问题

刚才迷茫在static的使用,于是看到下面的解释觉得好棒!我在看的C语言程序设计并没有如此详细的解释,谁能推荐一本类似于解释原理的书,就像下图中那种的,告诉你一些名词解释,代码被读取后在系统中如何被分析,被使用?感激之情将溢于言表!![图片说明](https://img-ask.csdn.net/upload/201603/12/1457795361_281889.png)

我用C语言写了一个闹钟程序但是总是死循环?

本人用C语言写了一个闹钟的程序但是总是陷入死循环出不来? 程序复制如下,请求大神解答。 mian.c函数 #include <stdio.h> #include <stdlib.h> #include "Alarm.h" int main() { /* *实现功能闹钟如下: 1.到了输入的时间可以发出提示。 */ shuru(); action(); return 0; } 头文件Alarm.h #ifndef ALARM_H_INCLUDED #define ALARM_H_INCLUDED #include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> static int nian; static int yue; static int ri; static int shi; static int fenzhong; static int miao; void shuru();//输入希望提醒您的时间 void action();//判断并做出提醒动作 #endif // ALARM_H_INCLUDED 实现函数shixian.c #include "Alarm.h" static int nian; static int yue; static int ri; static int shi; static int fenzhong; static int miao; //static int index=0;//此变量为参照物以确定是否需要发声 void shuru() { printf("请输入希望提醒您的时间。\n");//提示用户输入提醒的时间 printf("请输入年份\n"); scanf("%d",&nian);//希望提醒的年份 if((nian<=12)||(nian>=1)) {printf("输入正确。\n");} else{printf("输入错误。\n");} printf("请输入月份\n"); scanf("%d",&yue);//希望提醒的月份 if((yue<=12)||(nian>=1)) {printf("输入正确。\n");} else{printf("输入错误。\n");} printf("请输入日\n"); scanf("%d",&ri);//希望提醒的日 if((ri<=30)||(ri>=1)) {printf("输入正确。\n");} else{printf("输入错误。\n");} printf("请输入时\n"); scanf("%d",&shi);//希望提醒的时 if((shi<=24)||(shi>=1)) {printf("输入正确。\n");} else{printf("输入错误。\n");} printf("请输入分钟\n"); scanf("%d",&fenzhong);//希望提醒的分钟 if((ri<=60)||(ri>=1)) {printf("输入正确。\n");} else{printf("输入错误。\n");} printf("请输入秒\n"); scanf("%d",&miao);//希望提醒的秒 if((miao<=60)||(miao>=1)) {printf("输入正确。\n");} else{printf("输入错误。\n");} printf("%d年%d月%d日%d时%d分%d秒\n",nian,yue,ri,shi,fenzhong,miao); return 0; } action()//与系统给出时间进行对照没成功一次index加一,如果最后数值为6则发出声音 { //int index=0;//此变量为参照物以确定是否需要发声 time_t timep; struct tm *p; time (&timep); p=gmtime(&timep); int a=8+p->tm_hour; int index=0;//此变量为参照物以确定是否需要发声 do{ //for(index=0;index!=6;) //index=0;//如果没有达到条件将index置零重新开始。 printf("%d\n",p->tm_sec); /*获取当前秒*/ printf("%d\n",p->tm_min); /*获取当前分*/ printf("%d\n",8+p->tm_hour);/*获取当前时,这里获取西方的时间,刚好相差八个小时*/ printf("%d\n",p->tm_mday);/*获取当前月份日数,范围是1-31*/ printf("%d\n",1+p->tm_mon);/*获取当前月份,范围是0-11,所以要加1*/ printf("%d\n",1900+p->tm_year);/*获取当前年份,从1900开始,所以要加1900*/ //printf("%d",miao); if(p->tm_sec==miao){ index++;//秒对上了,index加一。 } if(p->tm_min==fenzhong){ index++;//分钟对上了index加一。 } if(a==shi){ index++;//小时对上了,index加一。 } if(p->tm_mday==ri){ index++;//天对上了,index加一。 } if(p->tm_mon==yue){ index++; //月对上了index加一。 } if(p->tm_year==nian){ index++;//年对上了,index加一。 } if(index!=6){ printf("提醒的时间未到请等待。\n"); } if(index==6){ goto cichu1;//如果index=6则条件达成跳出到cichu1继续执行。 } index=0;//如果没有达到条件将index置零重新开始。 } while(index!=6);//index不等于6继续执行循环对时,index=6跳出 { cichu1: printf("时间到了。\n"); printf("\a"); //printf("%d\n",p->tm_sec); /*获取当前秒*/ //printf("%d\n",p->tm_min); /*获取当前分*/ //printf("%d\n",8+p->tm_hour);/*获取当前时,这里获取西方的时间,刚好相差八个小时*/ //printf("%d\n",p->tm_mday);/*获取当前月份日数,范围是1-31*/ //printf("%d\n",1+p->tm_mon);/*获取当前月份,范围是0-11,所以要加1*/ //printf("%d\n",1900+p->tm_year);/*获取当前年份,从1900开始,所以要加1900*/ } return 0; }

C语言结构体里的数组出错

``` #include<stdio.h> typedef struct Node{ int A[100]; int Length; }StaticTable; int BinerySearch(StaticTable *Tb1,int K){ /**/ } return NotFound; } int SequentialSearch(StaticTable *Tb1,int K){ /**/ } int main(){ StaticTable *Tb1; for(int i=1;i<=10;i++){ Tb1->A[i]=5;//执行到这里就会出错,可是我看不出哪里错了,求大佬指点 } Tb1->Length=10; printf("%d\t",SequentialSearch(Tb1,36)); printf("%d",BinerySearch(Tb1,36)); return 0; } ```

C语言 单片机秒表程序

本人是一个新手 对于下边的c程序每一个子函数能看懂,但是像这么多子函数放到一起 就晕了,想请亲们帮我把这个程序的流程梳理梳理中断是何时工作,各个子函数怎么在这个整体里运行 越详细越好,本人十分感谢! ``` /* 设计的秒表计数到小数点后两位,(ms)用到六个数码管一个小数点加两位小数*/ #include<reg52.h> sbit ADDR3=P1^3; sbit ENLED=P1^4; sbit KEY1=P2^4; sbit KEY2=P2^5; sbit KEY3=P2^6; sbit KEY4=P2^7; unsigned char code LedChar[] = { //数码管显示字符转换表 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E }; unsigned char LedBuff[6]={ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF //数码管显示缓存区 }; unsigned char KeySta[4]={1,1,1,1}; bit StopwatchRunning=0; bit StopwatchRefresh=1; unsigned char IntegerPart=0;//整数部分 unsigned char DecimalPart=0;//小数部分 void ConfigTimer0(unsigned int ms); void StopwatchDisplay(); void KeyDriver(); void main() { EA=1; ENLED=0; ADDR3=1; P2=0XFE;//P2.0置零选第四行按键 ConfigTimer0(2);//T0定时2ms while(1) { if(StopwatchRefresh) //如果刷新需要调用显示函数 StopwatchRefresh=0; StopwatchDisplay(); KeyDriver(); } } /*配置并启动T0 ms就是T0的定时时间*/ void ConfigTimer0(unsigned int ms) { unsigned long tmp; tmp=11059200/12;// 1/T=f频率 tmp=(tmp*ms)/1000; // ms/1000=1s f*T=机械周期个数 tmp=65536-tmp; tmp=tmp+18; T0RH=(unsigned char)(tmp>>8); T0LH=(unsigned char)tmp; TMOD&=0xF0; TMOD|=0x01; TH0=T0RH; TL0=T0RL; ET0=1; TR0=1; } /*秒表计数显示函数*/ void StopwatchDisplay() { signed char i; unsigned char buf[4];//同理数据转换的缓冲区 /*小数部分转换到低2位*/ LedBuf[0]=LedChar[DecimalPart%10]; LedBuf[1]=LedChar[DecimalPart/10]; /*整数部分换到高4位 注意这里和小数部分区别是要用到缓存*/ buf[0]= IntegerPart%10; buf[0]= IntegerPart/10%10; buf[0]= IntegerPart/100%10; buf[0]= IntegerPart/1000%10; for(i=3;i>=1;i++)//把高位为零的换成空字符 { if(buf[i]==0) LedBuf[i+2]=0xFF;//置空 else break; } for(;i>=0;i--) { LedBuf[i+2]=LedChar[buf[i]]; } LedBuf[i+2]=0x7F;//运行到整数的最后一位上顺便点亮小数点 } /*秒表复位*/ void StopwatchReset() { StopwatchRunning=0; //停止秒表 IntegerPart=0; DecimalPart=0; StopwatchReset=1//重置刷新标志 } /*秒表启停函数*/ void StopwatchAction() { if(StopwatchRunning)//若是已经启动则停止 StopwatchRunning=0; else StopwatchRunning=1;//若是已经停止则启动 } /*按键驱动函数,检测到有按键动作,调度相应动作函数,只有两个按键另外四个。注意:需要在主函数调用*/ void KeyDriver() { unsigned char i; static unsigned char backup[4]=[1,1,1,1]; for(i=0;i<4;i++) { if(backup[i]!=KeySta[i]) { if(backup[i]!=0) { if(i==1) StopwatchReset(); else if(i==2) StopwatchAction(); } backup[i]=KeySta[i]; } } } /*数码管动态扫描刷新函数,注意:需在定时中断中调用*/ void LedScan() { static unsigned char i=0; P0=0XFF; P1=(P1&0xF8)|i; P0=LedBUF[i]; if(i<5) //在C里,i>5 i=0 继续走!!! i++; else i=0; } void KeyScan() { unsigned char i; static unsigned char keybuff[4]={ 0xFF,0xFF,0xFF,0xFF }; keybuff[0]=(keybuff[0]<<1)| KEY1; keybuff[1]=(keybuff[1]<<1)| KEY1; keybuff[2]=(keybuff[2]<<1)| KEY1; keybuff[3]=(keybuff[3]<<1)| KEY1; for(i=0;i<4;i++) { if(keybuff[i]==0x00)//连续8次扫描为0, 2ms*8(得移动8位上面才能有结果) { KeySta[i]=0; } else if(keybuff[i]==0xFF) { KeySta[i]=1; } } } /* 秒表计数函数,每隔10ms调用一次进行秒表计数累加 */ void StopwatchCount() { if (StopwatchRunning) //当处于运行状态时递增计数值 { DecimalPart++; //小数部分+1 if (DecimalPart >= 100) //小数部分计到100时进位到整数部分 { DecimalPart = 0; IntegerPart++; //整数部分+1 if (IntegerPart >= 10000) //整数部分计到10000时归零 { IntegerPart = 0; } } StopwatchRefresh = 1; //设置秒表计数刷新标志 } } /*T0中断函数,完成数码管扫描、按键扫描与秒表计数*/ void InterruptTimer0() interrupt 1 { static unsigned char tmr10ms =0; TH0=T0RH; TL0=T0RL; LedScan(); KeyScan(); //定时10ms进行一次秒表计数 tmr10ms++; if(tmr10ms>=5) //2ms一次 2*5=10ms { tmr10ms=0; StopwatchCount(); } } ```

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:csdn590)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

Windows版YOLOv4目标检测实战:训练自己的数据集

课程演示环境:Windows10; cuda 10.2; cudnn7.6.5; Python3.7; VisualStudio2019; OpenCV3.4 需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:训练自己的数据集》 课程链接:https://edu.csdn.net/course/detail/28745 YOLOv4来了!速度和精度双提升! 与 YOLOv3 相比,新版本的 AP (精度)和 FPS (每秒帧率)分别提高了 10% 和 12%。 YOLO系列是基于深度学习的端到端实时目标检测方法。本课程将手把手地教大家使用labelImg标注和使用YOLOv4训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。 本课程的YOLOv4使用AlexyAB/darknet,在Windows系统上做项目演示。包括:安装软件环境、安装YOLOv4、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算)和先验框聚类分析。还将介绍改善YOLOv4目标检测性能的技巧。 除本课程《Windows版YOLOv4目标检测实战:训练自己的数据集》外,本人将推出有关YOLOv4目标检测的系列课程。请持续关注该系列的其它视频课程,包括: 《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》 《Windows版YOLOv4目标检测实战:中国交通标志识别》 《Windows版YOLOv4目标检测:原理与源码解析》

lena全身原图(非256*256版本,而是全身原图)

lena全身原图(非256*256版本,而是全身原图) lena原图很有意思,我们通常所用的256*256图片是在lena原图上截取了头部部分的256*256正方形得到的. 原图是花花公子杂志上的一个

快速入门Android开发 视频 教程 android studio

这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

Java调用微信支付

Java 使用微信支付 一. 准备工作 1.

汽车租赁管理系统需求分析规格说明书

汽车租赁管理系统需求分析规格说明书,这只是一个模板,如果有不会的可以借鉴一下,还是蛮详细的。。。。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

程序员的算法通关课:知己知彼(第一季)

【超实用课程内容】 程序员对于算法一直又爱又恨!特别是在求职面试时,算法类问题绝对是不可逃避的提问点!本门课程作为算法面试系列的第一季,会从“知己知彼”的角度,聊聊关于算法面试的那些事~ 【哪些人适合学习这门课程?】 求职中的开发者,对于面试算法阶段缺少经验 想了解实际工作中算法相关知识 在职程序员,算法基础薄弱,急需充电 【超人气讲师】 孙秀洋&nbsp;| 服务器端工程师 硕士毕业于哈工大计算机科学与技术专业,ACM亚洲区赛铜奖获得者,先后在腾讯和百度从事一线技术研发,对算法和后端技术有深刻见解。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27272 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程无限观看时长,但是大家可以抓紧时间学习后一起讨论哦~

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

Python入门视频精讲

Python入门视频培训课程以通俗易懂的方式讲解Python核心技术,Python基础,Python入门。适合初学者的教程,让你少走弯路! 课程内容包括:1.Python简介和安装 、2.第一个Python程序、PyCharm的使用 、3.Python基础、4.函数、5.高级特性、6.面向对象、7.模块、8.异常处理和IO操作、9.访问数据库MySQL。教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

Java62数据提取代码

利用苹果手机微信下面的wx.data文件提取出62数据,通过62可以实现不同设备直接登陆,可以通过文件流的方式用脚本上传到服务器进行解析

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

2018年全国大学生计算机技能应用大赛决赛 大题

2018年全国大学生计算机技能应用大赛决赛大题,程序填空和程序设计(侵删)

Lena图像处理测试专业用图,高清完整全身原图

Lena图像处理测试专业用图,高清完整全身原图,该图片很好的包含了平坦区域、阴影和纹理等细节,这些都有益于测试各种不同的图像处理算法。它是一幅很好的测试照片!其次,由于这是一个非常有魅力女人的照片。

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

verilog实现地铁系统售票

使用 verilog 实现地铁售票

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉系统全面的介绍。

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

获取Linux下Ftp目录树并逐步绑定到treeview

在linux下抓取目录树,双击后获取该节点子节点(逐步生成)。另外有两个类,一个是windows下的(一次性获取目录树),一个是linux下的(足部获取目录树)

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

手把手实现Java图书管理系统(附源码)

【超实用课程内容】 本课程演示的是一套基于Java的SSM框架实现的图书管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群。详细介绍了图书管理系统的实现,包括:环境搭建、系统业务、技术实现、项目运行、功能演示、系统扩展等,以通俗易懂的方式,手把手的带你从零开始运行本套图书管理系统,该项目附带全部源码可作为毕设使用。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27513 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

Java 最常见的 200+ 面试题:面试必备

这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很有成就感和满足感,那所以何乐而不为呢? 说回面试的事,这份面试...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

微信小程序 实例汇总 完整项目源代码

微信小程序 实例汇总 完整项目源代码

基于西门子S7—1200的单部六层电梯设计程序,1部6层电梯

基于西门子S7—1200的单部六层电梯设计程序,1部6层电梯。 本系统控制六层电梯, 采用集选控制方式。 为了完成设定的控制任务, 主要根据电梯输入/输出点数确定PLC 的机型。 根据电梯控制的要求,

相关热词 c#对文件改写权限 c#中tostring c#支付宝回掉 c#转换成数字 c#判断除法是否有模 c# 横向chart c#控件选择多个 c#报表如何锁定表头 c#分级显示数据 c# 不区分大小写替换
立即提问
相关内容推荐