主頁 >  其他 > 【C語言】??函式超詳講解??(詳細講解+代碼演示+圖解)【建議收藏】

【C語言】??函式超詳講解??(詳細講解+代碼演示+圖解)【建議收藏】

2021-09-14 11:29:00 其他

自己整理的長篇詳細學習筆記分享給大家,如有錯誤,歡迎評論區指正

目錄

一、 函式是什么?

C語言中函式的分類

二、庫函式

為什么會有庫函式

庫函式的優點

如何學習庫函式

C語言常用的庫函式

三、自定義函式

為什么要有自定義函式

函式的組成

自定義函式的使用

比較兩數中的較大值

交換兩個整形變數的內容

四、函式的引數

五、函式的呼叫

傳值呼叫

傳址呼叫

六、函式的嵌套呼叫和鏈式訪問

嵌套呼叫

鏈式訪問

七、函式的宣告和定義

案例分析

函式宣告

函式定義

八、函式遞回

經典案例

什么是遞回?

請看如下案例(用遞回解決問題):

遞回的兩個必要條件

案例再分析

迭代與遞回


一、 函式是什么?

在數學中我們就經常使用函式,eg.f(x)=x+1,知道未知數x就可以求得函式值f(x)

那么C語言中的函式呢?維基百科中對函式的定義:子程式

  • 在計算機科學中,子程式(英語:Subroutine, procedure, function, routine, method,
    subprogram, callable unit),是一個大型程式中的某部分代碼, 由一個或多個陳述句塊組
    成,它負責完成某項特定任務,而且相較于其他代碼,具備相對的獨立性,
  • 一般會有輸入引數并有回傳值,提供對程序的封裝和細節的隱藏,這些代碼通常被集成為軟
    件庫,

C語言中函式的分類

  1. 庫函式
  2. 自定義函式

二、庫函式

為什么會有庫函式

  1. 我們知道在我們學習C語言編程的時候,總是在一個代碼撰寫完成之后迫不及待的想知道結果,想把這個結果列印到我們的螢屏上看看,這個時候我們會頻繁的使用一個功能:將資訊按照一定的格式列印到螢屏上(printf)
  2. 在編程的程序中我們會頻繁的做一些字串的拷貝作業(strcpy)
  3. 在編程是我們也計算,總是會計算n的k次方這樣的運算(pow)

C語言在早期出現的時候,沒有庫函式,在寫代碼的時候有很多的功能是經常都要用的,eg.列印,輸入等功能,然后人們就在想,能不能自己寫一些函式,以便于后期更加方便的使用,后來發現有一些函式是會被頻繁的使用,如果想要實作這種功能,如果每個人每次都自己去寫效率就太低了,于是就把常用的一些功能用C語言封裝成了函式,放在C語言中,就是現在的庫函式

庫函式的優點

  1. 提高了開發的效率
  2. 更加標準

如何學習庫函式

  • 推薦網站:
  1. cplusplus.com - The C++ Resources Network
  2. cppreference.com
  • 也可以用線下的工具:MSDN

參照檔案去學習庫函式,從檔案中查取函式的功能,回傳值,函式的引數等

C語言常用的庫函式

  • IO函式
  • 字串操作函式
  • 字符操作函式
  • 記憶體操作函式
  • 時間/日期函式
  • 數學函式
  • 其他庫函式

我們下面以 strcpy 這個函式為例來介紹一下如何用檔案來學習庫函式

1.檔案中(上面推薦的網站就可以)搜索函式名strcpy

會看到下圖:

從檔案我們可以看出這是一個字串拷貝函式,那既然要拷貝字串,必然涉及拷貝源頭和目的地,會發現函式的引數中恰好一個是目的地,一個是源頭,這兩個引數都是指標型別,回傳值也是指標型別,且回傳的是目的地的地址,頭檔案:<string.h>

通過代碼來體驗一下

#include <string.h>
#include <string.h>
int main()
{
	char arr1[] = "hello world";
	char arr2[20] = { 0 };
	strcpy(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}

運行結果:

再舉一個例子:memset函式,這個函式是什么功能呢?

在檔案中查找之后:

通過檔案了解到這個函式的作用就是將ptr所指向的那一塊空間的num個位元組設定為指定的值

函式的三個引數

  1. ptr: 指向要填充的那個記憶體塊的指標
  2. value: 設定的那個值
  3. num: 想要填充value值的空間記憶體大小

函式頭檔案<string.h>

通過以下代碼體驗一下

#include <string.h>
#include <stdio.h>
int main()
{
	char arr[] = "hello";
	memset(arr, 'a', 2);
	printf("%s\n", arr);
    return 0;
}

通過這段代碼我們來將arr陣列里面的前兩個元素修改為'a'

代碼運行結果:

到這里其實我們就應該做到平時有啥函式不會用,直接查檔案學習就行了,掌握庫函式的使用方法

注意:使用庫函式,必須包含#include 對應的頭檔案

不需要將庫函式全部記住,學會使用檔案查詢就可以

三、自定義函式

為什么要有自定義函式

我們要知道,庫函式是有限的,所能實作的功能就那么多,完全依賴庫函式也是不行的,不可能說開發一個軟體直接全部使用庫函式,如果庫函式能干所有的事情,那還要程式員干什么?自己什么也不用干那也是不可能的,一些業務性的代碼還是需要自己去寫的,那么我們就必須要掌握的一個東西就是自定義函式,所以更加重要的就是自定義函式

自定義函式和庫函式一樣,有函式名回傳值型別函式引數, 但是不一樣的是這些都是我們自己來設計,這給程式員一個很大的發揮空間

函式的組成

ret_type fun_name(para1, *)
{
	statement;
}
    //ret_type 回傳型別
    //fun_name 函式名
    //para1 函式引數

自定義函式的使用

之前我們在??整理2萬字帶你走進C語言(詳細講解+代碼演示+圖解)??(強烈建議收藏!!!)這篇文章中已經對函式做過一個介紹,在這里我們再詳細介紹一下

比較兩數中的較大值

首先通過以下代碼來體驗一下:

前面我們還沒學函式的時候,要想比較兩個函式的較大值,都是通過if陳述句來做的,如下代碼:

#include <stdio.h>
int main()
{
	int x = 0;
	int y = 0;
	printf("請輸入兩個數:>\n");
	scanf("%d %d", &x, &y);
	if (x > y)
	{
		printf("%d\n", x);
	}
	else
	{
		printf("%d\n", y);
	}
	return 0;
}

現在在這里我們用函式來實作一下:

#include <stdio.h>
int get_max(int x, int y)
{
	if (x > y)
	{
		return x;
	}
	else
	{
		return y;
	}
}
int main()
{
	int x = 0;
	int y = 0;
	printf("請輸入兩個數:>\n");
	scanf("%d %d", &x, &y);
	int ch = get_max(x, y);
	printf("%d\n", ch);
}

運行結果:

分析:

這里我們自己定義了一個get_max函式,向它傳進去兩個引數(即我們想要比較的兩個數),在這個函式內部,還是通過if陳述句來判斷大小,將較大值作為回傳值回傳,所以這里這個函式的回傳型別應該是整型,我們通過整型變數ch來接受這個回傳值,并在后面用printf函式列印較大值

再看下面的代碼:

void test()
{
	printf("success\n");
}
int main()
{
	test();
	return 0;
}

運行結果:

分析:

這段代碼中我們自己定義了一個測驗函式,函式里面沒有引數,函式也沒有回傳值,但這并沒有什么影響,所以我們應該知道,函式可以沒有引數,也可以沒有回傳值,自己視情況而定

交換兩個整形變數的內容

寫一個函式將x和y的值交換

#include <stdio.h>
void Swap1(int x, int y)
{
	int tmp = 0;
	tmp = x;
	x = y;
	y = tmp;
}
int main()
{
	int num1 = 1;
	int num2 = 2;
	Swap1(num1, num2);
	printf("Swap1::num1 = %d num2 = %d\n", num1, num2);
	return 0;
}

分析:

這里我們自定義一個交換函式Swap1來交換兩數,呼叫函式并傳參,直接將num1和num2傳給交換函式,交換函式在函式內部完成兩個數的交換,然后又去將num1和num2列印出來,代碼沒有任何問題

我們看運行結果:

這里會發現num1的值和num2的值并未交換,出了bug

原因分析:

這里傳參傳的是num1與num2的值,在函式Swap1中用形參x和y來接受傳過來的值,并將x和y做了交換,但是要知道,這只是單純的交換了x和y并未對num1和num2產生影響,可以通過VS2019的監視器視窗來除錯代碼再看看

通過監視器也可以看到num1和num2的值并未交換,而只是交換了x與y的值

可以再通過下圖理解一下

我們在將下面的函式的引數學完之后再來修改這個代碼

四、函式的引數

  • 實際引數(實參)

真實傳給函式的引數,叫實參,實參可以是:常量、變數、運算式、函式等,無論實參是何種類
型的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參

  • 形式引數(形參)

形式引數是指函式名后括號中的變數,因為形式引數只有在函式被呼叫的程序中才實體化(分配
記憶體單元),所以叫形式引數,形式引數當函式呼叫完成之后就自動銷毀了,因此形式引數只在
函式中有效

注意:

  1. 當實參傳給形參的時候,形參是實參的一份臨時拷貝,對形參的修改不會影響實參

接下來我們再回傳去看前面的代碼:交換兩數

分析:

要知道num1與num2和上面的x,y沒有任何聯系,所以形參的修改是不會實參的,那我們能不能讓他們建立聯系呢?答案是肯定可以的,我們在??整理2萬字帶你走進C語言(詳細講解+代碼演示+圖解)??(強烈建議收藏!!!)這篇文章中已經對指標有過一定的了解了,創建指標的本質目的不是為了存地址,而是希望后面能夠通過指標來訪問變數,所以這個地方我們可以通過指標來讓它們之間建立聯系,通過指標就能找到它所指向的那個物件

#include <stdio.h>
void Swap2(int* px, int* py)    //不需要回傳值,所以用void
{
	int tmp = 0;
	tmp = *px;
	*px = *py;
	*py = tmp;
}
int main()
{
	int num1 = 1;
	int num2 = 2;
	Swap2(&num1, &num2);
	printf("Swap2::num1 = %d num2 = %d\n", num1, num2);
	return 0;
}

分析:

這里我們呼叫Swap2函式的時候傳參傳的是指標(num1和num2的地址),以便于在Swap中能夠修改實參的值,Swap2函式中用指標來接收,并通過間接訪問的方式成功交換兩數

運行結果:

上面Swap1和Swap2函式中的引數x,y,px,py 都是形式引數,在main函式中傳給Swap1的num1,num2和傳給Swap2函式的&num1,&num2是實際引數

這里可以看到Swap1函式在呼叫的時候,x,y擁有自己的空間,同時擁有了和實參一模一樣的內容,所以我們可以簡單的認為:形參實體化之后其實相當于實參的一份臨時拷貝

通過交換兩數這個案例我們感受到了傳的引數分別是值和指標時的不同,可以來總結一下:

五、函式的呼叫

傳值呼叫

函式的形參和實參分別占有不同記憶體塊,對形參的修改不會影響實參

傳址呼叫

  • 傳址呼叫是把函式外部創建變數的記憶體地址傳遞給函式引數的一種呼叫函式的方式,
  • 這種傳參方式可以讓函式和函式外邊的變數建立起真正的聯系,也就是函式內部可以直接操作函式外部的變數

溫馨提示:

函式的內容一般我們不在函式內部列印,讓函式的功能更加獨立(提高函式的復用性)

六、函式的嵌套呼叫和鏈式訪問

嵌套呼叫

函式和函式之間可以有機的組合的

嵌套呼叫就是某個函式呼叫另外一個函式(即函式嵌套允許在一個函式中呼叫另外一個函式)

如下代碼:

#include <stdio.h>
void new_line()
{
	printf("hehe\n");
}
void three_line()
{
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		new_line();    //嵌套呼叫,呼叫new_line()函式
	}
}
int main()
{
	three_line();
	return 0;
}

運行結果:

鏈式訪問

把一個函式的回傳值作為另外一個函式的引數

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[20] = "hello";
	int ret = strlen(arr);
	printf("%d\n", ret);
	return 0;
}

分析:這段代碼我們在第一篇文章中有講過,用strlen求陣列中字串的長度,用ret來接受回傳值,并將ret列印出來,那通過鏈式訪問我們可以直接這樣來做:

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[20] = "hello";
	printf("%d\n", strlen(arr));
	return 0;
}

直接將strlen函式的呼叫放在原來ret的位置,將strlen函式的回傳值作為了printf函式的引數

運行結果:

接下來我們來看下面這個代碼:

#include <stdio.h>
int main()
{
	printf("%d", printf("%d", printf("%d", 43)));
	return 0;
}

仔細想一下,運行結果是什么呢?

分析:

這段代碼中是三個printf的鏈式訪問,執行的時候,肯定是先呼叫最內層的函式,列印出來43,然后,再呼叫中間的printf,它要列印的值是printf("%d", 43) ,而printf這個函式的回傳值是什么呢?我們可以查一下檔案發現printf這個函式的回傳值其實就是它所要列印的字符總個數(如果發生錯誤的話會回傳負值),那么最內層的printf的回傳值就應該是43的字符個數2,所以中間的printf列印的就是2,回傳值為1,最外層的printf列印1,最終結果應該是4321

運行結果:

七、函式的宣告和定義

案例分析

先來一段我們之前寫過的代碼:

代碼1:這段代碼我們前面運行過,沒有任何問題

#include <stdio.h>
int get_max(int x, int y)
{
	if (x > y)
	{
		return x;
	}
	else
	{
		return y;
	}
}
int main()
{
	int x = 0;
	int y = 0;
	printf("請輸入兩個數:>\n");
	scanf("%d %d", &x, &y);
	int ch = get_max(x, y);
	printf("%d\n", ch);
}

代碼2:將定義的get_max()函式放在main函式的下面

#include <stdio.h>
int main()
{
	int x = 0;
	int y = 0;
	printf("請輸入兩個數:>\n");
	scanf("%d %d", &x, &y);
	int ch = get_max(x, y);
	printf("%d\n", ch);
}
int get_max(int x, int y)
{
	if (x > y)
	{
		return x;
	}
	else
	{
		return y;
	}
}

編譯代碼2

我們會發現代碼2編譯的時候編譯器會報一個警告:“get_max函式未定義”,這是怎么回事呢?

這是因為我們之前寫的時候都是在main函式的前面定義函式的,編譯的時候,前面的函式定義編譯器已經掃過去了,就知道已經有這個函式的存在了或者說這個函式已經定義了,宣告了,在main函式里面呼叫這個函式,編譯器也不會有任何問題;

而如果將函式定義放在main函式的下面,編譯的時候在main函式立案看到get_max()這個函式完全不知道它,就會報警告

我們在課本上會經常看到以下寫法:

代碼3:

#include <stdio.h>
int get_max(int x, int y);    //宣告函式
int main()
{
	int x = 0;
	int y = 0;
	printf("請輸入兩個數:>\n");
	scanf("%d %d", &x, &y);
	int ch = get_max(x, y);
	printf("%d\n", ch);
}
int get_max(int x, int y)
{
	if (x > y)
	{
		return x;
	}
	else
	{
		return y;
	}
}

在main函式前面對自定義函式進行了宣告----首先告訴編譯器,有一個函式名字叫get_max,有兩個引數都是int型別,回傳型別為int

函式宣告

  1. 告訴編譯器有一個函式叫什么,引數是什么,回傳型別是什么,但是具體是不是存在,無關
    緊要
  2. 函式的宣告一般出現在函式的使用之前,要滿足先宣告后使用
  3. 函式的宣告一般要放在頭檔案中的

函式定義

函式的定義是指函式的具體實作,交待函式的功能實作

注意:
前面的代碼3這個地方的函式宣告從語法方面來將沒有任何問題,但是我們一般都不會這么去寫,因為其實函式宣告主要不是在這里用的,一般情況下,在一個工程中,有3個最基本的檔案,測驗檔案(.c),頭檔案(.h),功能模塊檔案(.c)

函式宣告案例

我們繼續以上面的案例為例來介紹函式宣告,創建test.c,test.h,function.c這三個檔案,函式宣告放在test.h里面,函式的定義放在function.c里面,在test.c里面完成測驗,

如下圖:

要注意:在使用function.c里面的函式的時候一定要包含自己的頭檔案test.c(用雙引號),函式宣告要放在函式使用之前

八、函式遞回

經典案例

首先請看如下代碼:

#include <stdio.h>
int main()
{
	printf("hello\n");
	main();
	return 0;
}

這段代碼我們會發現main函式在自己呼叫自己,理論上這會死回圈下去

運行結果:

程式本來是main函式在不斷的自己呼叫自己,在最后掛掉了,下面我們正式學習遞回

什么是遞回?

程式呼叫自身的編程技巧稱為遞回( recursion),

遞回做為一種演算法在程式設計語言中廣泛應用, 一個程序或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞回策略只需少量的程式就可
描述出解題程序所需要的多次重復計算,大大地減少了程式的代碼量, 遞回的主要思考方式在
于:把大事化小

請看如下案例(用遞回解決問題):

接受一個整型值(無符號),按照順序列印它的每一位, 例如: 輸入:1234,輸出 1 2 3 4

分析:

這里我們要用遞回的話,首先要自己定義一個函式print來列印1234的每一位

想得到1234的每一位

1234%10==4 1234/4==123

如果這個數大于9那就說明它是一個兩位數,需要拆解

比如要列印1234,那我們可以這樣:

先將123列印出來,再列印4

要列印123,先列印12,再列印3

要列印12,先列印1,再列印2

代碼實作:

#include <stdio.h>
void print(int n)
{
	if (n > 9)
	{
		print(n / 10);
	}
	printf("%d ", n % 10);
}
int main()
{
	unsigned int num = 1234;
	print(num);
	return 0;
}

運行結果:

圖解:

遞回的兩個必要條件

  • 存在限制條件,當滿足這個限制條件的時候,遞回便不再繼續
  • 每次遞回呼叫之后越來越接近這個限制條件

案例再分析

我們現在再回過頭看開始的案例:main函式自己呼叫自己,程式運行到一般自己掛了,這是什么原因呢?

首先我們通過下圖來了解一下計算機記憶體區,在C語言的學習中我們一般將記憶體劃分為堆疊區,堆區,靜態區

我們來除錯一下程式會出現下圖:

main函式在呼叫是會在堆疊區開辟空間,上面的案例代碼就是在一個main函式還未呼叫結束時又重新呼叫main函式,這就會一直不停的在堆疊上開辟空間,堆疊上的記憶體空間也是有限的,當堆疊空間被耗盡的時候就會導致堆疊溢位的問題,如上圖所示,所以說寫遞回必須遵循上面提到的遞回的兩個必要條件

迭代與遞回

  1. 許多問題是以遞回的形式進行解釋的,這只是因為它比非遞回的形式更為清晰
  2. 但是這些問題的迭代實作往往比遞回實作效率更高,雖然代碼的可讀性稍微差些
  3. 當一個問題相當復雜,難以用迭代實作時,此時遞回實作的簡潔性便可以補償它所帶來的運行時開銷

--------------------------------------------------------------------------------

-------------------------C語言函式部分完結-----------------------------

關于C語言,每個知識點后面都會單獨寫博客更加詳細的介紹

歡迎大家關注!!!

一起學習交流 !!!

讓我們將編程進行到底!!!

--------------整理不易,請三連支持------------------

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299938.html

標籤:其他

上一篇:真實詮釋程式員日常的二十四張圖【你中了幾個】

下一篇:kafka詳解(架構、集群)-step1

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more