摘要:在位機(jī)器上,如果有個(gè)地址線,那一個(gè)指針變量的大小是個(gè)字節(jié),才能存放一個(gè)地址。就是一個(gè)指針變量,也有自己的類(lèi)型,指針變量的類(lèi)型我們可以發(fā)現(xiàn)指針的定義方式是類(lèi)型星號(hào)。也就是說(shuō)存儲(chǔ)什么變量類(lèi)型就用什么指針變量類(lèi)型。
前言:
本篇為你介紹什么是指針以及指針的基本運(yùn)用,讓你更了解什么是指針,指針的運(yùn)算,指針與數(shù)組,二級(jí)指針等
指針,是C語(yǔ)言中的一個(gè)重要概念及其特點(diǎn),也是掌握C語(yǔ)言比較困難的部分。
指針也就是內(nèi)存地址,指針變量是用來(lái)存放內(nèi)存地址的變量,不同類(lèi)型的指針變量所占用的存儲(chǔ)單元長(zhǎng)度是相同的,而存放數(shù)據(jù)的變量因數(shù)據(jù)的類(lèi)型不同,所占用的存儲(chǔ)空間長(zhǎng)度也不同。有了指針以后,不僅可以對(duì)數(shù)據(jù)本身,也可以對(duì)存儲(chǔ)數(shù)據(jù)的變量地址進(jìn)行操作。
在計(jì)算機(jī)科學(xué)中,指針(Pointer)是編程語(yǔ)言中的一個(gè)對(duì)象,利用地址,它的值直接指向(points to)存在電腦存儲(chǔ)器中另一個(gè)地方的值。由于通過(guò)地址能找到所需的變量單元,可以說(shuō),地址指向該變量單元。因此,將地址形象化的稱(chēng)為“指針”。意思是通過(guò)它能找到以它為地址的內(nèi)存單元。
我們可以這樣理解:
這里是編譯器里面的一個(gè)存儲(chǔ)數(shù)據(jù)的內(nèi)存,然后我們把他分為若干個(gè)字節(jié),每一個(gè)字節(jié)叫做一個(gè)內(nèi)存單元。每一個(gè)字節(jié)進(jìn)行一個(gè)編號(hào),這個(gè)編號(hào)是唯一跟這個(gè)單元匹配的,用這個(gè)編號(hào)就可以找到這個(gè)內(nèi)存單元。
也就是說(shuō):地址指向了一個(gè)確定的空間,所以地址形象的被稱(chēng)為指針。
那既然存儲(chǔ)的內(nèi)存單元是有編號(hào)的,我們來(lái)看看下面的代碼:
int main(){ int a = 10; //在內(nèi)存中開(kāi)辟一塊空間存放a的值 //a的地址:0x00CFFC6C int * pa = &a; //pa是用來(lái)存放地址的,所以pa是指針變量。 return 0;}
上面的代碼中,我們先創(chuàng)建變量a,也就是在內(nèi)存中開(kāi)辟一塊空間存放a的值,而&
符則可以取出該變量的地址,然后把a(bǔ)的地址存到pa里面去,說(shuō)明pa就是一個(gè)指針變量。
所以總的來(lái)說(shuō):
指針就是變量,用來(lái)存放地址的變量。(存放在指針中的值都被當(dāng)成地址處理)。
那么這里存在兩個(gè)問(wèn)題:
上面我們說(shuō)到,指針是存放地址的變量,那一個(gè)地址多大呢,又有多少地址呢,編址能擁有多大的空間呢,這就是我們接下來(lái)要研究的問(wèn)題。
我們知道,機(jī)器有32位的,也有64位的。那32位的機(jī)器有32根地址線,然后通電后的高電頻低電頻由電信號(hào)轉(zhuǎn)化為數(shù)字信號(hào),這個(gè)數(shù)字信號(hào)就是1或者0,而32根地址線產(chǎn)生32個(gè)1/0。
那一個(gè)內(nèi)存單元多大才合適呢,這里我們有bit,byte,kb,mb,gb,tb
等供您選擇,我們先試試最小的bit合不合適,2的32次方bit化為gb就是0.5gb,一共大小才0.5gb,不合適吧。經(jīng)過(guò)仔細(xì)的計(jì)算和權(quán)衡我們發(fā)現(xiàn)一個(gè)字節(jié)(byte)給一個(gè)對(duì)應(yīng)的地址是比較合適的!
每一個(gè)地址一個(gè)字節(jié),那么就有4GB的空間來(lái)進(jìn)行編制,對(duì)于計(jì)算機(jī)來(lái)說(shuō)是足夠的了。同樣的方法,64位機(jī)器,如果給64根地址線,那能編址多大空間,有興趣的小伙伴可以自己計(jì)算一下。
所以總結(jié)起來(lái)就是:
1.在32位的機(jī)器上,地址是32個(gè)0或者1組成二進(jìn)制序列,那地址就得用4個(gè)字節(jié)的空間來(lái)存儲(chǔ),所以一個(gè)指針變量的大小就應(yīng)該是4個(gè)字節(jié)。
2.在64位機(jī)器上,如果有64個(gè)地址線,那一個(gè)指針變量的大小是8個(gè)字節(jié),才能存放一個(gè)地址。
3.指針的大小在32位平臺(tái)是4個(gè)字節(jié),在64位平臺(tái)是8個(gè)字節(jié)。
首先我們知道變量有不同的類(lèi)型,整形,浮點(diǎn)型等,那指針也有不同的類(lèi)型嗎,答案是:有的。
我們來(lái)看一下這個(gè)代碼:
int main(){ int a = 10; p = &a; //這樣的代碼可不可行? return 0;}
答案是不可行的,因?yàn)閜根本沒(méi)有定義。我們現(xiàn)在是想用p來(lái)存儲(chǔ)a的地址,所以p也要帶上他自己的類(lèi)型,也就是int * p = &a;
。
p就是一個(gè)指針變量,也有自己的類(lèi)型,指針變量的類(lèi)型:
char *pc = NULL;int *pi = NULL;short *ps = NULL;long *pl = NULL;float *pf = NULL;double *pd = NULL
我們可以發(fā)現(xiàn):指針的定義方式是: type + *
(類(lèi)型+星號(hào))。 其實(shí): char*
類(lèi)型的指針是為了存放 char 類(lèi)型變量的地址。 short*
類(lèi)型的指針是為了存放 short 類(lèi)型變量的地址。也就是說(shuō)存儲(chǔ)什么變量類(lèi)型就用什么指針變量類(lèi)型。
那指針的類(lèi)型的意義又是什么呢?
我們來(lái)看下面一段代碼:
int main(){ int n = 10; char* pc = (char*)&n; int* pi = &n; printf("%p/n", &n); printf("%p/n", pc); printf("%p/n", pc + 1); printf("%p/n", pi); printf("%p/n", pi + 1); return 0;}
這一段代碼的意思是:創(chuàng)建一個(gè)int變量,用char *
類(lèi)型去存儲(chǔ)他的地址,和用int *
去存他的地址,當(dāng)打印地址時(shí),觀察他們的區(qū)別。我們來(lái)看看結(jié)果:
我們可以觀察到,n的地址是00CFFD0C(當(dāng)然每一次運(yùn)行的時(shí)候都有可能不一樣),然后我們創(chuàng)建的char * pc
指針變量存儲(chǔ)n的地址,這里因?yàn)轭?lèi)型不同在&n前面加了強(qiáng)制類(lèi)型轉(zhuǎn)換,而int * pi
同樣也是存儲(chǔ)n的地址。然后我們發(fā)現(xiàn),pc跟pi存的地址打印出來(lái)的時(shí)候都是一樣的,說(shuō)明存儲(chǔ)這個(gè)過(guò)程是可以進(jìn)行的,但當(dāng)pc和pi加1后,就產(chǎn)生了差異。
這里就涉及到指針 ± 整數(shù)的意義了,指針在 ± 整數(shù)的時(shí)候,實(shí)際上就是往下一個(gè)地址去,那作為指針(地址)我們知道是有大小的,比如存一個(gè)int類(lèi)型的變量的地址要4個(gè)字節(jié),所以我們?cè)谥羔槨罆r(shí),也是要一個(gè)這樣的大小。比如上面的代碼中,char類(lèi)型的pc+1
,地址在變動(dòng)了一個(gè)字節(jié),而int類(lèi)型的pi+1
,就跳過(guò)了四個(gè)字節(jié)。
總的來(lái)說(shuō)就是:
指針的類(lèi)型決定了指針向前或者向后走一步有多大(距離)。
解引用過(guò)程中也是同樣關(guān)乎到大小的問(wèn)題,我們用代碼來(lái)說(shuō)明:
#include int main(){ int n = 0x11223344; char* pc = (char*)&n; int* pi = &n; *pc = 0; *pi = 0; //我們來(lái)觀察解引用的時(shí)候會(huì)有什么區(qū)別。 return 0;}
我們來(lái)逐步觀察這個(gè)代碼的變化:
① 這里的第一步就是創(chuàng)建n變量,第二步創(chuàng)建char * pc
存儲(chǔ)n的地址,第三步創(chuàng)建int * pi
存儲(chǔ)n的地址。這些都不重要,下面兩條代碼才是主要的區(qū)別,看他們值的變化。
② 在這里,第三步轉(zhuǎn)換第四步的時(shí)候,實(shí)際上就是執(zhí)行了*pc = 0
的代碼,然后* pc
變?yōu)?,但是pc所存的地址也就是n的地址
里面的內(nèi)容卻只變了高位的44,而不是將地址內(nèi)的內(nèi)容改為0。
③ 這里第四到第五步中,執(zhí)行的是*pi =0
的代碼,然后* pi變成0了,而且pi所存的地址也就是n的地址
里面的內(nèi)容也變成了0。
說(shuō)明了什么?
說(shuō)明了在指針解引用操作的時(shí)候,你所存儲(chǔ)地址的指針類(lèi)型是多大,你能操作的地址就是多少,比如char *
類(lèi)型的指針,在解引用的時(shí)候操作的就是一個(gè)字節(jié)的內(nèi)容,所以上面* pc
改變內(nèi)容的時(shí)候,只有一個(gè)字節(jié)的內(nèi)容發(fā)生了變化,而* pi
改變的時(shí)候可以將全部都改變,因?yàn)檫@個(gè)指針也是int 的類(lèi)型。
所以總的來(lái)說(shuō):
指針的類(lèi)型決定了,對(duì)指針解引用的時(shí)候有多大的權(quán)限(能操作幾個(gè)字節(jié))。 比如:
char*
的指針解引用就只能訪問(wèn)一個(gè)字節(jié),而int*
的指針的解引用就能訪問(wèn)四個(gè)字節(jié)。
這就是指針類(lèi)型的意義。
概念: 野指針就是指針指向的位置是不可知的(隨機(jī)的、不正確的、沒(méi)有明確限制的)
野指針的成因是什么?其實(shí)野指針就是沒(méi)有指向具體位置的指針。而成因主要有以下三種:
#include int main(){ int *p; //局部變量指針未初始化,默認(rèn)為隨機(jī)值 *p = 10; return 0;}
我們創(chuàng)建指針變量,通常會(huì)指向某一個(gè)確定的變量的地址,但是直接創(chuàng)建指針變量卻不初始化,那這個(gè)指針就如同無(wú)家可歸的孩子,只能隨機(jī)找一個(gè)地方呆了。然后給這個(gè)指針解引用賦值,也是賦值到了不知道何處。這就是其中一種野指針。
int main(){ int arr[10] = {0}; int *p = arr; int i = 0; for(i=0; i<=11; i++) { //當(dāng)指針指向的范圍超出數(shù)組arr的范圍時(shí),p就是野指針 *(p++) = i; } return 0;}
這里就是超出數(shù)組范圍后,雖然指針指向一個(gè)地址本身是沒(méi)有錯(cuò)的,但不能去改變里面的內(nèi)容,這樣子就是錯(cuò)誤的了。當(dāng)超出數(shù)組范圍后,指針就是越界訪問(wèn)了,就不是一個(gè)正常的指針了。這就是第二種野指針。
int* fun(){ int a = 10; return &a;}int main(){ int* p = fun(); printf("%d/n", *p); return 0;}
在這里我們創(chuàng)建一個(gè)p的指針變量,然后調(diào)用fun函數(shù)返回a的地址,但是注意,這里fun函數(shù)在返回地址后就會(huì)銷(xiāo)毀,也就是說(shuō)這個(gè)函數(shù)調(diào)用完之后推出就不見(jiàn)了,當(dāng)我們的p指針變量去找他的時(shí)候,那里已經(jīng)不是a確定的地址了,這是十分危險(xiǎn)的。
但是我們運(yùn)行后得出來(lái)*p的值仍然是10,但這并不是a的10,而是這個(gè)內(nèi)存中這一個(gè)地址里面的數(shù)據(jù)沒(méi)有變,p指針找過(guò)去得到的而已,所以這也不是一個(gè)確定具體的地址。當(dāng)這個(gè)地址被覆蓋的時(shí)候,得到就也就不會(huì)還是10了。這就是第三種野指針。
1. 指針初始化
2. 小心指針越界
3. 指針指向空間釋放即使置NULL
4. 指針使用之前檢查有效性
PS:如果不懂得函數(shù)創(chuàng)建銷(xiāo)毀的,可以看一下【C語(yǔ)言】函數(shù)棧幀的創(chuàng)建與銷(xiāo)毀這里面具體講到了代碼每一步運(yùn)行是怎樣的,基于棧幀的運(yùn)行時(shí),函數(shù)是怎么創(chuàng)建銷(xiāo)毀的。
①.指針±整數(shù)
②.指針-指針
③.指針的關(guān)系運(yùn)算
等等
看到第二點(diǎn)的時(shí)候就會(huì)有人覺(jué)得,指針有±整數(shù),為什么第二點(diǎn)就只有指針-指針,而沒(méi)有指針+指針呢?這是因?yàn)橹羔?指針,就是地址加地址,有什么意義呢,這如同日期-日期知道天數(shù)差距,日期+日期卻沒(méi)什么意義,所以我們不討論指針+指針。
我們來(lái)看這一段代碼:
#define N_VALUES 5int main(){ float values[N_VALUES]; float *vp; //指針+-整數(shù);指針的關(guān)系運(yùn)算 for (vp = &values[0]; vp < &values[N_VALUES];) { *vp++ = 0; } return 0;}
這里的#define N_VALUES 5
是一個(gè)宏定義,就是不會(huì)改變的一個(gè)數(shù)值。然后我們創(chuàng)建一個(gè)values數(shù)組,代入了N_VALUES
所以這個(gè)數(shù)組就是5個(gè)元素。然后for循環(huán)其實(shí)就是把0放進(jìn)數(shù)組里面,因?yàn)槭呛笾?+,先放進(jìn)去再++,所以就是能填滿(mǎn)數(shù)組。
這里就有指針±整數(shù)了,指針±整數(shù),實(shí)際上就是以該指針類(lèi)型大小向后面的內(nèi)存中劃出一個(gè)指針類(lèi)型大小,然后指向這一個(gè)地址。圖示可能更容易理解:
這里雖然到N_VALUES
,但是并沒(méi)有訪問(wèn),所以這里并不是一個(gè)野指針。
對(duì)于指針-指針呢,我們看這個(gè)代碼;
int main(){ int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; printf("%d/n", &arr[9] - &arr[0]); printf("%d/n", &arr[0] - &arr[9]); return 0;}
這里我們創(chuàng)建一個(gè)數(shù)組,然后地址-地址,也就是指針-指針,得到的是什么呢?我們來(lái)看一下結(jié)果:
得到的是他們之間的內(nèi)存空間嗎,其實(shí)并不是。結(jié)果是9和-9,這是什么意思呢,其實(shí)指針-指針的含義是這樣的:
指針-指針,在滿(mǎn)足兩個(gè)指針指向同一塊區(qū)域的前提下,得到的數(shù)字的絕對(duì)值是指針和指針之間元素的個(gè)數(shù)。
所以我們得到的是arr[0]到arr[9]之間的元素個(gè)數(shù),也就是0-8這9個(gè)元素。
我們知道關(guān)系運(yùn)算有等于、大于、小于、大于等于、小于等于和不等于六種。對(duì)于指針來(lái)說(shuō),等于和不等于就是判斷兩個(gè)指針的值是否相同或不同,即兩個(gè)指針是否指向了相同或不同的地方。而大于和小于是判斷指針的值哪個(gè)大哪個(gè)小。值較小的在存儲(chǔ)器中的位置比較靠前,值較大的在存儲(chǔ)器中的位置比較靠后。
我們用一個(gè)代碼來(lái)說(shuō)明:
#define N_VALUES 5float values[N_VALUES];float* vp;int main(){ for (vp = &values[N_VALUES]; vp > &values[0];) { *--vp = 0; }}
這里就是拿指針變量vp和數(shù)組比較,然后按照大到小依次把數(shù)組里面的值變?yōu)?,指針的比較就是指針的關(guān)系運(yùn)算。
但比較的也有他的前提:
標(biāo)準(zhǔn)規(guī)定:
允許指向數(shù)組元素的指針與指向數(shù)組最后一個(gè)元素后面的那個(gè)內(nèi)存位置的指針比較,但是不允許與指向第一個(gè)元素之前的那個(gè)內(nèi)存位置的指針進(jìn)行比較。
這就是指針的運(yùn)算。
數(shù)組名是什么?老規(guī)矩,上代碼:
#include int main(){ int arr[10] = {1,2,3,4,5,6,7,8,9,0}; printf("%p/n", arr); printf("%p/n", &arr[0]); return 0;}
我們來(lái)觀察一下,數(shù)組名和數(shù)組首元素地址有什么聯(lián)系,結(jié)果:
我們會(huì)發(fā)現(xiàn),數(shù)組名和數(shù)組首元素的地址是一樣的,這可以讓我們得出一個(gè)猜測(cè)的結(jié)論:數(shù)組名表示的是數(shù)組首元素的地址。
這個(gè)結(jié)論是不是正確的呢,我們來(lái)測(cè)試一下讓數(shù)組名代替首元素地址看看得出的是否可以正常運(yùn)行。
int main(){ int arr[] = { 1,2,3,4,5,6,7,8,9,0 }; int* p = arr; //指針存放的是數(shù)組首元素的地址 int sz = sizeof(arr) / sizeof(arr[0]); for (int i = 0; i < sz; i++) { printf("&arr[%d] = %p <====> p+%d = %p/n", i, &arr[i], i, p + i); //打印觀察arr能不能作為首元素地址 } return 0;}
答案是可行的,當(dāng)我們將arr表示的地址存儲(chǔ)起來(lái)后,讓指針變量p±整數(shù)時(shí),變化的就是該數(shù)組的元素輸出,那我們就可以直接通過(guò)指針來(lái)訪問(wèn)數(shù)組,所以arr所表示的地址確實(shí)為數(shù)組首元素的地址。
但是也有例外,
sizeof(數(shù)組名) - 這里的數(shù)組名不是首元素的地址,是表示整個(gè)數(shù)組的,這里計(jì)算的是整個(gè)數(shù)組的大小,單位還是字節(jié)
&數(shù)組名 - 這里的數(shù)組名不是首元素的地址,是表示整個(gè)數(shù)組的,拿到的是整個(gè)數(shù)組的地址。
看一段代碼:
int main(){ int arr[10] = { 0 }; printf("%p/n", arr);//數(shù)組名是首元素的地址 printf("%p/n", arr + 1); printf("%d/n", sizeof(arr));//第一個(gè)元素的地址 printf("%p/n", &arr);//取出整個(gè)數(shù)組的地址,但打印的是首元素地址 printf("%p/n", &arr + 1); return 0;}
我們先看打印結(jié)果:
然后我們來(lái)分析一下:
① 數(shù)組名打印首元素地址,表示首元素,然后數(shù)組名+1,得到的是跳過(guò)同類(lèi)型大小的地址,也就是數(shù)組下一個(gè)元素的地址,說(shuō)明數(shù)組名確實(shí)表示數(shù)組首元素的地址。
② sizeof(數(shù)組名)所打印的是整個(gè)數(shù)組的大小,這里10個(gè)元素表示40字節(jié)。
③ 取地址+數(shù)組名打印的也是首元素地址,但他并不是表示數(shù)組首元素地址,在我們加一后,跳過(guò)的并不是一個(gè)元素的大小,而是整個(gè)數(shù)組的大小,說(shuō)明取地址+數(shù)組名代表的是整個(gè)數(shù)組的地址。
c語(yǔ)言中有指針,那有沒(méi)有二級(jí)指針呢,三級(jí)呢,答案也是:有的。
首先我們知道,指針是用來(lái)存放變量的地址的,那指針是不是變量,指針變量,當(dāng)然是變量,所以是變量就有地址,那指針變量的地址存放在哪里? 這就是 二級(jí)指針,那二級(jí)指針是不是變量,是變量,地址存儲(chǔ)用什么,三級(jí)指針。(俄羅斯套娃又來(lái)了) 。
對(duì)于上面的二級(jí)指針的運(yùn)算有:
*p2
通過(guò)對(duì)p2
中的地址進(jìn)行解引用,這樣找到的是p1
,*p2
其實(shí)訪問(wèn)的就是p1
.
我們看這一個(gè)代碼:
int main(){ int a = 10; int* p1 = &a; int** p2 = &p1; int b = 20; *p2 = &b; printf("%p/n", &a); printf("%p/n", &b); printf("%p/n", p1); return 0;}
運(yùn)行的結(jié)果為:
我們?cè)谝婚_(kāi)始的時(shí)候是將a的地址存到了p1
上去,然后再以*p2=&b
去訪問(wèn)p1的地址把b的地址放進(jìn)去了。所以 *p2
其實(shí)訪問(wèn)的就是 p1
。
**p2
先通過(guò)*p2
找到p1
,然后對(duì)p1
進(jìn)行解引用操作:*p1
,那找到的是 a.
我們看這一個(gè)代碼:
int main(){ int a = 10; int* p1 = &a; int** p2 = &p1; **p2 = 30; printf("%d/n", a); //答案是30還是10? return 0;}
運(yùn)行結(jié)果:30
這里就是說(shuō)明其實(shí)三級(jí)指針也是可以二次解引用,訪問(wèn)a的地址,然后去操作a地址上的內(nèi)容,這里**p2
也可以想象成*(*p2)
,*p2
就是訪問(wèn)p1
,所以化為*p1
,而*p1
訪問(wèn)的就是a的地址。 所以最終結(jié)果是30.
Q:指針數(shù)組是指針還是數(shù)組?
答案:是數(shù)組。是存放指針的數(shù)組。
數(shù)組我們已經(jīng)知道有整形數(shù)組,字符數(shù)組等如:
那指針數(shù)組是怎樣的?我們知道變量和指針都有不同類(lèi)型,而同一種大小類(lèi)型的變量和指針之間差一個(gè) *
號(hào),所以指針數(shù)組也和數(shù)組相似:
int main(){ int arr1[3]; char arr2[5]; int * arr3[3]; char* arr4[5]; return 0;}
那
int * arr3[3];
表示什么呢?
其實(shí),這表示的意思就是arr3
是一個(gè)數(shù)組,有五個(gè)元素,每個(gè)元素是一個(gè)整形指針。就如同上面的數(shù)組一樣,一個(gè)數(shù)組,里面都是這個(gè)類(lèi)型。
這幾種數(shù)組或指針數(shù)組的意思和定義:
int main(){ int arr[10]; //整型數(shù)組 - 存放整型的數(shù)組就是整型數(shù)組 char ch[5]; //字符數(shù)組 - 存放字符的數(shù)組就是字符數(shù)組 //指針數(shù)組 - 存放指針的數(shù)組就是指針數(shù)組 //int* 整型指針的數(shù)組 //char* 字符指針的數(shù)組 int* parr[5]; //整型指針的數(shù)組 char* pc[6]; //字符指針的數(shù)組 return 0;}
好啦,本篇的內(nèi)容就到這里,小白制作不易,有錯(cuò)的地方還請(qǐng)xdm指正,互相關(guān)注,共同進(jìn)步。
還有一件事:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/119674.html
摘要:還不清楚原碼反碼補(bǔ)碼的可以到語(yǔ)言從入門(mén)到入土操作符篇中的移位操作符處學(xué)習(xí)一下。比如原碼反碼補(bǔ)碼原碼顯示值補(bǔ)碼數(shù)據(jù)存放內(nèi)存中其實(shí)存放的是補(bǔ)碼補(bǔ)碼的表示與存儲(chǔ)在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來(lái)表示和存儲(chǔ)。 ...
摘要:代碼修正后修改后,我們可以排列無(wú)限個(gè)數(shù)字這樣,一個(gè)冒泡排序就完成了。,數(shù)組名表示整個(gè)數(shù)組。 首先感謝一位博主: 原來(lái)45 他寫(xiě)的博客內(nèi)容十分詳細(xì),為我創(chuàng)造博客提供了莫大的幫助,也為我解決了很多困難。 先貼出2篇他的文章 C語(yǔ)言從入門(mén)到入土(入門(mén)篇)(數(shù)組p1)_原來(lái)45的博客-CSDN博客 ...
摘要:基于許可的開(kāi)源平臺(tái),創(chuàng)始人是的項(xiàng)目架構(gòu)師,它特色是提供了插件,開(kāi)發(fā)人員可以通過(guò)插件直接繪畫(huà)出業(yè)務(wù)流程圖。二工作流引擎對(duì)象,這是工作的核心。五總結(jié)工作流的概念就先介紹這么多了,更多的去官網(wǎng)查看,下一節(jié)將用一個(gè)入門(mén)的實(shí)例來(lái)對(duì)工作流進(jìn)行講解。 文章源碼托管:https://github.com/OUYANGSIHA...歡迎 star !!! 一、activiti介紹 Activiti5是由...
摘要:二環(huán)境準(zhǔn)備編譯器選擇這里我們使用進(jìn)行工作流開(kāi)發(fā),雖然對(duì)于工作流的友好度不是很好,因?yàn)闀?huì)有一些小的,但是,對(duì)于的開(kāi)發(fā)還是非常的好的。新建后出現(xiàn)下面的編輯頁(yè)面到現(xiàn)在,編輯插件就準(zhǔn)備好了。 文章源碼托管:https://github.com/OUYANGSIHA...歡迎 star !!! 一、前言 在上一節(jié)中我們對(duì)activiti進(jìn)行了基本的介紹activiti進(jìn)行了基本的介紹,同時(shí)介紹了...
摘要:文章源碼托管歡迎一前言在上一節(jié)中,通過(guò)一個(gè)入門(mén)程序,把的環(huán)境準(zhǔn)備好了,這一節(jié),將整合,并且部署一個(gè)最簡(jiǎn)單的流程圖。測(cè)試結(jié)果四總結(jié)這一節(jié)通過(guò)整合,繪制簡(jiǎn)單的文件,然后成功部署了文件。 文章源碼托管:https://github.com/OUYANGSIHA...歡迎 star !!! 一、前言 在上一節(jié)中,通過(guò)一個(gè)入門(mén)程序,把a(bǔ)ctiviti的環(huán)境準(zhǔn)備好了,這一節(jié),將整合spring,并...
閱讀 3152·2021-11-04 16:09
閱讀 3106·2021-09-23 11:49
閱讀 3603·2021-09-09 09:33
閱讀 3604·2021-08-18 10:22
閱讀 2041·2019-08-30 15:55
閱讀 3624·2019-08-30 15:53
閱讀 2653·2019-08-28 18:08
閱讀 888·2019-08-26 18:18