主頁 > 軟體工程 > C語言陣列與指標

C語言陣列與指標

2020-09-29 21:14:45 軟體工程



 
看到一篇關于C語言指標的文章,正好最近在看《C和指標》就去看了一下。《一道 C 語言指標訪存題目的引申》,里面的第一個題目就把我難住了。

幫助123456789 #include <stdio.h>   int main() {     int a[5] = {1, 2, 3, 4, 5};     int *pa = (int)(&a) + 1;     printf("%x\n", *pa);     return 0; }

正確的輸出結果應該是 2000000.自詡對C指標還比較了解,不就是保存記憶體地址的變數嗎?有什么難的,后來才發現我錯了。我想的是&a,是對陣列名字去地址,那出來的結果不就是保存a的地址,那這樣給他轉換成int變數之后再加1,然后再賦值給一個int*指標是會出錯的,結果我編譯了一下,真的出錯了:
error: invalid conversion from `int' to `int*'.
無法將int值賦值給int *指標變數,我修改了一下,在(int)(&a) + 1;前面加上了一個強制型別轉換 (int *),編譯之后輸出結果:

我以為正確了,雖然他說正確答案是 2000000。后來我又仔細看了一下源代碼,發現 int *pa = (int *)(int)(&a) + 1; 這句代碼是先將 &a 轉換成指標再在其基礎加 1。而原來的意思是先給 &a 加 1再轉換成指標,結果我再修改了一下代碼:int *pa = (int *)((int)(&a) + 1); 這樣結果竟然正確了,輸出2000000:

 

這時候我完全朦了,這是怎么回事?后來我將 &a 和 a作為整數輸出,想看看它到底是什么,結果發現

幫助12 printf("%d\n",&amp;a); printf("%d\n",a);

他們的輸出結果是一樣的,也就是說a 和 &a 的值一樣,我以為問題到這里就解決了,但是我還是不能理解為什么會輸出 2000000.于是我到網上去搜索了一下資料,結果搜到了 對陣列名取地址是什么? 。里面說


幫助123 1 int array[100]; 3 memset(array,  0, sizeof(array)); 4 memset(&amp;array, 0, sizeof(array));

第3行和第4行有什么不同嗎?其實從效果上來說是一樣的,但是這里要注意 array 和 &array 的型別是不同的。array 相當于 &array[0],而 &array 是一個指向 int[100] 的指標,型別是 int(*)[100]。”

總算知道了a和&a的差別,但是我還是不明白為什么它會輸出 2000000,這到底是為什么呢?

我試著修改了一下代碼:

int a[] = {1,5};

這樣之后的輸出結果成了 : 5000000 原來和陣列a的第二個元素有關系。哈哈,有點懂了,經過我N次的試驗。

首先我們的代碼是:

幫助123 int a[] = {1,2};     int *pa = (int *)((int)(&amp;a) + 1);     printf("%x\n", *(pa));

我這邊編譯的結果 a[0]也就是a代表的地址是 0x22ff70 a[1] 的地址是 0x22ff74 。我查看了一下記憶體(使用printf看的),記憶體里的資料是這樣的:

幫助12 0x22ff70 0x22ff71 ... 0x22ff74 ... 0x22ff77 01          00   ...      02   ...    00

而且我們知道訪問記憶體中的資料是高位元組的地址是高位,低位元組的地址是低位。也就是說如果我的地址是 0x22ff70,以這個地址訪問一個整數,得到的整數就是73,72,71,70的資料排列 即00000001(以前學過一點匯編,加上自己試驗了一下,就出來的 :),也就是1。如果訪問0x22ff74 也就是 00000002 是2.如果訪問 0x22ff71 也就是從74開始 02000000。這不就是我們的正確答案 2000000 。
問題解決!寫得比較亂,勿怪。若有錯誤,歡迎指正!
(全文完)

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

分析的很好  不過這個貌似沒什么實用價值...

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

你咋發到問題里來了,應該自己開博客發到里面

uj5u.com熱心網友回復:

試試看試試看試試看試試看試試看試試看試試看試試看試試看試試看試試看試試看試試看試試看試試看

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

每天回帖即可獲得10分可用分!

uj5u.com熱心網友回復:

學習受用了!~~

uj5u.com熱心網友回復:

學習受用了!~~ 

uj5u.com熱心網友回復:

學習受用了!~~

uj5u.com熱心網友回復:

收益了

uj5u.com熱心網友回復:

學習了

uj5u.com熱心網友回復:

回帖賺積分。。

uj5u.com熱心網友回復:

不錯,牛人,學習了!!!

uj5u.com熱心網友回復:

學習了
指標這東西比較復雜

uj5u.com熱心網友回復:

受教了

uj5u.com熱心網友回復:

以前從沒注意到arr和&arr  不過語法上來講都行的通

uj5u.com熱心網友回復:

語法上來講都行的通

uj5u.com熱心網友回復:

受教了

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

踩一下,留個名

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

回帖賺積分。。

uj5u.com熱心網友回復:

路過看看。。

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

每天回帖即可獲得10分可用分! 

uj5u.com熱心網友回復:

計算機組成原理→DOS命令→匯編語言→C語言(不包括C++)、代碼書寫規范→資料結構、編譯原理、作業系統→計算機網路、資料庫原理、正則運算式→其它語言(包括C++)、架構……

對學習編程者的忠告:
眼過千遍不如手過一遍!
書看千行不如手敲一行!
手敲千行不如單步一行!
單步源代碼千行不如單步對應匯編一行!

VC除錯時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編視窗、堆疊視窗、記憶體視窗和暫存器視窗看每句C對應的匯編、單步執行并觀察相應堆疊、記憶體和暫存器變化,這樣過一遍不就啥都明白了嗎。
對VC來說,所謂‘除錯時’就是編譯連接通過以后,按F10或F11鍵單步執行一步以后的時候,或者在某行按F9設了斷點后按F5執行停在該斷點處的時候。
(Turbo C或Borland C用Turbo Debugger除錯,Linux或Unix下用GDB除錯時,看每句C對應的匯編并單步執行觀察相應記憶體和暫存器變化。)

想要從本質上理解C指標,必須學習匯編以及C和匯編的對應關系。
從匯編的角度理解和學習C語言的指標,原本看似復雜的東西就會變得非常簡單!
指標即地址。“地址又是啥?”“只能從匯編語言和計算機組成原理的角度去解釋了。”
但我又不得不承認:
 有那么些人喜歡或者適合用“先具體再抽象”的方法學習和理解復雜事物;
 而另一些人喜歡或者適合用“先抽象再具體”的方法學習和理解復雜事物。
而我本人屬前者。

不要企圖依賴輸出指標相關運算式的值【比如printf("%p\n",...)】來理解指標的本質,
而要依賴除錯時的反匯編視窗中的C/C++代碼【比如void *p=...】及其對應匯編指令以及記憶體視窗中的記憶體地址和記憶體值來理解指標的本質。


這輩子不看記憶體地址和記憶體值;只畫鏈表、指標示意圖,畫堆疊示意圖,畫各種示意圖,甚至自己沒畫過而只看過書上的圖……能從本質上理解指標、理解函式引數傳遞嗎?本人深表懷疑!
這輩子不種麥不收麥不將麥粒拿去磨面;只吃饅頭、吃面條、吃面包、……甚至從沒看過別人怎么蒸饅頭,壓面條,烤面包,……能從本質上理解面粉、理解面食嗎?本人深表懷疑!!

提醒:
“學習用匯編語言寫程式”

“VC除錯(TC或BC用TD除錯)時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編視窗、堆疊視窗、記憶體視窗和暫存器視窗看每句C對應的匯編、單步執行并觀察相應堆疊、記憶體和暫存器變化,這樣過一遍不就啥都明白了嗎。
(Linux或Unix下可以在用GDB除錯時,看每句C對應的匯編并單步執行觀察相應記憶體和暫存器變化。)
想要從本質上理解C指標,必須學習C和匯編的對應關系。”
不是一回事!

不要迷信書、考題、老師、回帖;
要迷信CPU、編譯器、除錯器、運行結果。
并請結合“盲人摸太陽”和“駕船出海時一定只帶一個指南針。”加以理解。
任何理論、權威、傳說、真理、標準、解釋、想象、知識……都比不上擺在眼前的事實!

有人說一套做一套,你相信他說的還是相信他做的?
其實嚴格來說這個世界上古往今來所有人都是說一套做一套,不是嗎?

不要寫連自己也預測不了結果的代碼!

電腦記憶體或檔案內容只是一個一維二進制位元組陣列及其對應的二進制地址;
人腦才將電腦記憶體或檔案內容中的這個一維二進制位元組陣列及其對應的二進制地址的某些部分看成是整數、有符號數/無符號數、浮點數、復數、英文字母、阿拉伯數字、中文/韓文/法文……字符/字串、匯編指令、函式、函式引數、堆、堆疊、陣列、指標、陣列指標、指標陣列、陣列的陣列、指標的指標、二維陣列、字符點陣、字符筆畫的坐標、黑白二值圖片、灰度圖片、彩色圖片、錄音、視頻、指紋資訊、身份證資訊……

十字鏈表交換任意兩個節點C源代碼(C指標應用終極挑戰)http://download.csdn.net/detail/zhao4zhong1/5532495

uj5u.com熱心網友回復:


不明覺歷

arr 和&arr的區別主要就是做整數加法的時候

int arr[2];
arr + 1 和 &arr + 1,二者對1的偏移解釋不一樣,就是這么簡單,沒什么可糾結的

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

學習了

uj5u.com熱心網友回復:

a和&a取地址 是有一定區別的,29樓簡單化了~

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

C 太難了,俺pass

uj5u.com熱心網友回復:

無聊的考試題, 為什么要寫這樣的代碼呢?

uj5u.com熱心網友回復:

不明覺厲   int * +1 和 int +1  考慮大小端大概就這樣吧。

uj5u.com熱心網友回復:

支持一個  

uj5u.com熱心網友回復:

樓主寫了這么多,我來總結下吧。
陣列a存盤的內容,按20個位元組(小端模式)分別為:
01 00 00 00   02 00 00 00   03 00 00 00   04 00 00 00   05 00 00 00
其中a指向01開始處
int *pa = (int *)((int)(&a) + 1);

這里pa相比a地址,增加一個位元組,指向01后面的00,所以int *pa表示的內容為00 00 00 02,printf出來就是2000000

int *pc = a + 1;

這里pc指向02開始處,int *pc表示的內容為02 00 00 00,printf出來就是00 00 00 02
int *pb = (int *)&a + 1;

這里pb指向陣列a越界的地方a[5],int *pb表示的內容為記憶體未初始化的值。

uj5u.com熱心網友回復:

學習了。。。

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

參考 28 樓 zhao4zhong1 的回復:
計算機組成原理→DOS命令→匯編語言→C語言(不包括C++)、代碼書寫規范→資料結構、編譯原理、作業系統→計算機網路、資料庫原理、正則運算式→其它語言(包括C++)、架構……

對學習編程者的忠告:
眼過千遍不如手過一遍!
書看千行不如手敲一行!
手敲千行不如單步一行!
單步源代碼千行不如單步對應匯編一行!

VC除錯時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編視窗、堆疊視窗、記憶體視窗和暫存器視窗看每句C對應的匯編、單步執行并觀察相應堆疊、記憶體和暫存器變化,這樣過一遍不就啥都明白了嗎。
對VC來說,所謂‘除錯時’就是編譯連接通過以后,按F10或F11鍵單步執行一步以后的時候,或者在某行按F9設了斷點后按F5執行停在該斷點處的時候。
(Turbo C或Borland C用Turbo Debugger除錯,Linux或Unix下用GDB除錯時,看每句C對應的匯編并單步執行觀察相應記憶體和暫存器變化。)

想要從本質上理解C指標,必須學習匯編以及C和匯編的對應關系。
從匯編的角度理解和學習C語言的指標,原本看似復雜的東西就會變得非常簡單!
指標即地址。“地址又是啥?”“只能從匯編語言和計算機組成原理的角度去解釋了。”
但我又不得不承認:
 有那么些人喜歡或者適合用“先具體再抽象”的方法學習和理解復雜事物;
 而另一些人喜歡或者適合用“先抽象再具體”的方法學習和理解復雜事物。
而我本人屬前者。

不要企圖依賴輸出指標相關運算式的值【比如printf("%p\n",...)】來理解指標的本質,
而要依賴除錯時的反匯編視窗中的C/C++代碼【比如void *p=...】及其對應匯編指令以及記憶體視窗中的記憶體地址和記憶體值來理解指標的本質。


這輩子不看記憶體地址和記憶體值;只畫鏈表、指標示意圖,畫堆疊示意圖,畫各種示意圖,甚至自己沒畫過而只看過書上的圖……能從本質上理解指標、理解函式引數傳遞嗎?本人深表懷疑!
這輩子不種麥不收麥不將麥粒拿去磨面;只吃饅頭、吃面條、吃面包、……甚至從沒看過別人怎么蒸饅頭,壓面條,烤面包,……能從本質上理解面粉、理解面食嗎?本人深表懷疑!!

提醒:
“學習用匯編語言寫程式”

“VC除錯(TC或BC用TD除錯)時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編視窗、堆疊視窗、記憶體視窗和暫存器視窗看每句C對應的匯編、單步執行并觀察相應堆疊、記憶體和暫存器變化,這樣過一遍不就啥都明白了嗎。
(Linux或Unix下可以在用GDB除錯時,看每句C對應的匯編并單步執行觀察相應記憶體和暫存器變化。)
想要從本質上理解C指標,必須學習C和匯編的對應關系。”
不是一回事!

不要迷信書、考題、老師、回帖;
要迷信CPU、編譯器、除錯器、運行結果。
并請結合“盲人摸太陽”和“駕船出海時一定只帶一個指南針。”加以理解。
任何理論、權威、傳說、真理、標準、解釋、想象、知識……都比不上擺在眼前的事實!

有人說一套做一套,你相信他說的還是相信他做的?
其實嚴格來說這個世界上古往今來所有人都是說一套做一套,不是嗎?

不要寫連自己也預測不了結果的代碼!

電腦記憶體或檔案內容只是一個一維二進制位元組陣列及其對應的二進制地址;
人腦才將電腦記憶體或檔案內容中的這個一維二進制位元組陣列及其對應的二進制地址的某些部分看成是整數、有符號數/無符號數、浮點數、復數、英文字母、阿拉伯數字、中文/韓文/法文……字符/字串、匯編指令、函式、函式引數、堆、堆疊、陣列、指標、陣列指標、指標陣列、陣列的陣列、指標的指標、二維陣列、字符點陣、字符筆畫的坐標、黑白二值圖片、灰度圖片、彩色圖片、錄音、視頻、指紋資訊、身份證資訊……

十字鏈表交換任意兩個節點C源代碼(C指標應用終極挑戰)http://download.csdn.net/detail/zhao4zhong1/5532495
你回答問題的時候能不能不加那么多無關的東西啊,跟水經驗一樣

uj5u.com熱心網友回復:

簡潔多了。。。
參考 39 樓 lming_08 的回復:
樓主寫了這么多,我來總結下吧。
陣列a存盤的內容,按20個位元組(小端模式)分別為:
01 00 00 00   02 00 00 00   03 00 00 00   04 00 00 00   05 00 00 00
其中a指向01開始處
int *pa = (int *)((int)(&a) + 1);

這里pa相比a地址,增加一個位元組,指向01后面的00,所以int *pa表示的內容為00 00 00 02,printf出來就是2000000

int *pc = a + 1;

這里pc指向02開始處,int *pc表示的內容為02 00 00 00,printf出來就是00 00 00 02
int *pb = (int *)&a + 1;

這里pb指向陣列a越界的地方a[5],int *pb表示的內容為記憶體未初始化的值。

uj5u.com熱心網友回復:

我也是菜鳥,不過至少認真一點這個問題還是挺簡單的,陣列名稱也是一個指標,有一種說法是陣列名稱是一個指標常量
就是說他是一個常量,本質上。。。那個常量的值是陣列的首地址,既是陣列第一個元素的地址
一般寫a 陣列名就行了,沒必要再寫取地址運算子,比如 int a[5] = {0};   scanf("%d",a);   而不是scanf("%d",&a);
雖然那第二個代碼沒錯,但是一般來說沒必要&了,字太長懶得看了,嘿嘿。。

uj5u.com熱心網友回復:

好好學習,天天向上

uj5u.com熱心網友回復:

每天回帖即可獲得10分可用分!

uj5u.com熱心網友回復:

參考 42 樓 letingoo 的回復:
Quote: 參考 28 樓 zhao4zhong1 的回復:

計算機組成原理→DOS命令→匯編語言→C語言(不包括C++)、代碼書寫規范→資料結構、編譯原理、作業系統→計算機網路、資料庫原理、正則運算式→其它語言(包括C++)、架構……

對學習編程者的忠告:
眼過千遍不如手過一遍!
書看千行不如手敲一行!
手敲千行不如單步一行!
單步源代碼千行不如單步對應匯編一行!

VC除錯時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編視窗、堆疊視窗、記憶體視窗和暫存器視窗看每句C對應的匯編、單步執行并觀察相應堆疊、記憶體和暫存器變化,這樣過一遍不就啥都明白了嗎。
對VC來說,所謂‘除錯時’就是編譯連接通過以后,按F10或F11鍵單步執行一步以后的時候,或者在某行按F9設了斷點后按F5執行停在該斷點處的時候。
(Turbo C或Borland C用Turbo Debugger除錯,Linux或Unix下用GDB除錯時,看每句C對應的匯編并單步執行觀察相應記憶體和暫存器變化。)

想要從本質上理解C指標,必須學習匯編以及C和匯編的對應關系。
從匯編的角度理解和學習C語言的指標,原本看似復雜的東西就會變得非常簡單!
指標即地址。“地址又是啥?”“只能從匯編語言和計算機組成原理的角度去解釋了。”
但我又不得不承認:
 有那么些人喜歡或者適合用“先具體再抽象”的方法學習和理解復雜事物;
 而另一些人喜歡或者適合用“先抽象再具體”的方法學習和理解復雜事物。
而我本人屬前者。

不要企圖依賴輸出指標相關運算式的值【比如printf("%p\n",...)】來理解指標的本質,
而要依賴除錯時的反匯編視窗中的C/C++代碼【比如void *p=...】及其對應匯編指令以及記憶體視窗中的記憶體地址和記憶體值來理解指標的本質。


這輩子不看記憶體地址和記憶體值;只畫鏈表、指標示意圖,畫堆疊示意圖,畫各種示意圖,甚至自己沒畫過而只看過書上的圖……能從本質上理解指標、理解函式引數傳遞嗎?本人深表懷疑!
這輩子不種麥不收麥不將麥粒拿去磨面;只吃饅頭、吃面條、吃面包、……甚至從沒看過別人怎么蒸饅頭,壓面條,烤面包,……能從本質上理解面粉、理解面食嗎?本人深表懷疑!!

提醒:
“學習用匯編語言寫程式”

“VC除錯(TC或BC用TD除錯)時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編視窗、堆疊視窗、記憶體視窗和暫存器視窗看每句C對應的匯編、單步執行并觀察相應堆疊、記憶體和暫存器變化,這樣過一遍不就啥都明白了嗎。
(Linux或Unix下可以在用GDB除錯時,看每句C對應的匯編并單步執行觀察相應記憶體和暫存器變化。)
想要從本質上理解C指標,必須學習C和匯編的對應關系。”
不是一回事!

不要迷信書、考題、老師、回帖;
要迷信CPU、編譯器、除錯器、運行結果。
并請結合“盲人摸太陽”和“駕船出海時一定只帶一個指南針。”加以理解。
任何理論、權威、傳說、真理、標準、解釋、想象、知識……都比不上擺在眼前的事實!

有人說一套做一套,你相信他說的還是相信他做的?
其實嚴格來說這個世界上古往今來所有人都是說一套做一套,不是嗎?

不要寫連自己也預測不了結果的代碼!

電腦記憶體或檔案內容只是一個一維二進制位元組陣列及其對應的二進制地址;
人腦才將電腦記憶體或檔案內容中的這個一維二進制位元組陣列及其對應的二進制地址的某些部分看成是整數、有符號數/無符號數、浮點數、復數、英文字母、阿拉伯數字、中文/韓文/法文……字符/字串、匯編指令、函式、函式引數、堆、堆疊、陣列、指標、陣列指標、指標陣列、陣列的陣列、指標的指標、二維陣列、字符點陣、字符筆畫的坐標、黑白二值圖片、灰度圖片、彩色圖片、錄音、視頻、指紋資訊、身份證資訊……

十字鏈表交換任意兩個節點C源代碼(C指標應用終極挑戰)http://download.csdn.net/detail/zhao4zhong1/5532495
你回答問題的時候能不能不加那么多無關的東西啊,跟水經驗一樣

這就是苦口婆心啊。

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

參考 39 樓 lming_08 的回復:
樓主寫了這么多,我來總結下吧。
陣列a存盤的內容,按20個位元組(小端模式)分別為:
01 00 00 00   02 00 00 00   03 00 00 00   04 00 00 00   05 00 00 00
其中a指向01開始處
int *pa = (int *)((int)(&a) + 1);

這里pa相比a地址,增加一個位元組,指向01后面的00,所以int *pa表示的內容為00 00 00 02,printf出來就是2000000

int *pc = a + 1;

這里pc指向02開始處,int *pc表示的內容為02 00 00 00,printf出來就是00 00 00 02
int *pb = (int *)&a + 1;

這里pb指向陣列a越界的地方a[5],int *pb表示的內容為記憶體未初始化的值。


最后一個有問題int *pb = (int *)&a + 1;這個指向的是a[1], (int*)(&a+1)這個才是越界

uj5u.com熱心網友回復:

參考 47 樓 zhao4zhong1 的回復:
Quote: 參考 42 樓 letingoo 的回復:

Quote: 參考 28 樓 zhao4zhong1 的回復:

計算機組成原理→DOS命令→匯編語言→C語言(不包括C++)、代碼書寫規范→資料結構、編譯原理、作業系統→計算機網路、資料庫原理、正則運算式→其它語言(包括C++)、架構……

對學習編程者的忠告:
眼過千遍不如手過一遍!
書看千行不如手敲一行!
手敲千行不如單步一行!
單步源代碼千行不如單步對應匯編一行!

VC除錯時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編視窗、堆疊視窗、記憶體視窗和暫存器視窗看每句C對應的匯編、單步執行并觀察相應堆疊、記憶體和暫存器變化,這樣過一遍不就啥都明白了嗎。
對VC來說,所謂‘除錯時’就是編譯連接通過以后,按F10或F11鍵單步執行一步以后的時候,或者在某行按F9設了斷點后按F5執行停在該斷點處的時候。
(Turbo C或Borland C用Turbo Debugger除錯,Linux或Unix下用GDB除錯時,看每句C對應的匯編并單步執行觀察相應記憶體和暫存器變化。)

想要從本質上理解C指標,必須學習匯編以及C和匯編的對應關系。
從匯編的角度理解和學習C語言的指標,原本看似復雜的東西就會變得非常簡單!
指標即地址。“地址又是啥?”“只能從匯編語言和計算機組成原理的角度去解釋了。”
但我又不得不承認:
 有那么些人喜歡或者適合用“先具體再抽象”的方法學習和理解復雜事物;
 而另一些人喜歡或者適合用“先抽象再具體”的方法學習和理解復雜事物。
而我本人屬前者。

不要企圖依賴輸出指標相關運算式的值【比如printf("%p\n",...)】來理解指標的本質,
而要依賴除錯時的反匯編視窗中的C/C++代碼【比如void *p=...】及其對應匯編指令以及記憶體視窗中的記憶體地址和記憶體值來理解指標的本質。


這輩子不看記憶體地址和記憶體值;只畫鏈表、指標示意圖,畫堆疊示意圖,畫各種示意圖,甚至自己沒畫過而只看過書上的圖……能從本質上理解指標、理解函式引數傳遞嗎?本人深表懷疑!
這輩子不種麥不收麥不將麥粒拿去磨面;只吃饅頭、吃面條、吃面包、……甚至從沒看過別人怎么蒸饅頭,壓面條,烤面包,……能從本質上理解面粉、理解面食嗎?本人深表懷疑!!

提醒:
“學習用匯編語言寫程式”

“VC除錯(TC或BC用TD除錯)時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編視窗、堆疊視窗、記憶體視窗和暫存器視窗看每句C對應的匯編、單步執行并觀察相應堆疊、記憶體和暫存器變化,這樣過一遍不就啥都明白了嗎。
(Linux或Unix下可以在用GDB除錯時,看每句C對應的匯編并單步執行觀察相應記憶體和暫存器變化。)
想要從本質上理解C指標,必須學習C和匯編的對應關系。”
不是一回事!

不要迷信書、考題、老師、回帖;
要迷信CPU、編譯器、除錯器、運行結果。
并請結合“盲人摸太陽”和“駕船出海時一定只帶一個指南針。”加以理解。
任何理論、權威、傳說、真理、標準、解釋、想象、知識……都比不上擺在眼前的事實!

有人說一套做一套,你相信他說的還是相信他做的?
其實嚴格來說這個世界上古往今來所有人都是說一套做一套,不是嗎?

不要寫連自己也預測不了結果的代碼!

電腦記憶體或檔案內容只是一個一維二進制位元組陣列及其對應的二進制地址;
人腦才將電腦記憶體或檔案內容中的這個一維二進制位元組陣列及其對應的二進制地址的某些部分看成是整數、有符號數/無符號數、浮點數、復數、英文字母、阿拉伯數字、中文/韓文/法文……字符/字串、匯編指令、函式、函式引數、堆、堆疊、陣列、指標、陣列指標、指標陣列、陣列的陣列、指標的指標、二維陣列、字符點陣、字符筆畫的坐標、黑白二值圖片、灰度圖片、彩色圖片、錄音、視頻、指紋資訊、身份證資訊……

十字鏈表交換任意兩個節點C源代碼(C指標應用終極挑戰)http://download.csdn.net/detail/zhao4zhong1/5532495
你回答問題的時候能不能不加那么多無關的東西啊,跟水經驗一樣

這就是苦口婆心啊。
廣而告之

uj5u.com熱心網友回復:

不明覺厲,c指標真是讓人頭疼

uj5u.com熱心網友回復:

int *pa = (int *)((int)(&a) + 1);
(int)(&a)這個表示什么意思呢?

uj5u.com熱心網友回復:

學習了

uj5u.com熱心網友回復:

學習中~~謝謝分享

uj5u.com熱心網友回復:

一直被指標的問題困擾,還請多指教

uj5u.com熱心網友回復:

參考 33 樓 rufusjing 的回復:
a和&a取地址 是有一定區別的,29樓簡單化了~


一語中的。。做了個實驗 就是指標沒有向4地址對齊導致的。。

uj5u.com熱心網友回復:

參考 28 樓 zhao4zhong1 的回復:
計算機組成原理→DOS命令→匯編語言→C語言(不包括C++)、代碼書寫規范→資料結構、編譯原理、作業系統→計算機網路、資料庫原理、正則運算式→其它語言(包括C++)、架構……

對學習編程者的忠告:
眼過千遍不如手過一遍!
書看千行不如手敲一行!
手敲千行不如單步一行!
單步源代碼千行不如單步對應匯編一行!

VC除錯時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編視窗、堆疊視窗、記憶體視窗和暫存器視窗看每句C對應的匯編、單步執行并觀察相應堆疊、記憶體和暫存器變化,這樣過一遍不就啥都明白了嗎。
對VC來說,所謂‘除錯時’就是編譯連接通過以后,按F10或F11鍵單步執行一步以后的時候,或者在某行按F9設了斷點后按F5執行停在該斷點處的時候。
(Turbo C或Borland C用Turbo Debugger除錯,Linux或Unix下用GDB除錯時,看每句C對應的匯編并單步執行觀察相應記憶體和暫存器變化。)

想要從本質上理解C指標,必須學習匯編以及C和匯編的對應關系。
從匯編的角度理解和學習C語言的指標,原本看似復雜的東西就會變得非常簡單!
指標即地址。“地址又是啥?”“只能從匯編語言和計算機組成原理的角度去解釋了。”
但我又不得不承認:
 有那么些人喜歡或者適合用“先具體再抽象”的方法學習和理解復雜事物;
 而另一些人喜歡或者適合用“先抽象再具體”的方法學習和理解復雜事物。
而我本人屬前者。

不要企圖依賴輸出指標相關運算式的值【比如printf("%p\n",...)】來理解指標的本質,
而要依賴除錯時的反匯編視窗中的C/C++代碼【比如void *p=...】及其對應匯編指令以及記憶體視窗中的記憶體地址和記憶體值來理解指標的本質。


這輩子不看記憶體地址和記憶體值;只畫鏈表、指標示意圖,畫堆疊示意圖,畫各種示意圖,甚至自己沒畫過而只看過書上的圖……能從本質上理解指標、理解函式引數傳遞嗎?本人深表懷疑!
這輩子不種麥不收麥不將麥粒拿去磨面;只吃饅頭、吃面條、吃面包、……甚至從沒看過別人怎么蒸饅頭,壓面條,烤面包,……能從本質上理解面粉、理解面食嗎?本人深表懷疑!!

提醒:
“學習用匯編語言寫程式”

“VC除錯(TC或BC用TD除錯)時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編視窗、堆疊視窗、記憶體視窗和暫存器視窗看每句C對應的匯編、單步執行并觀察相應堆疊、記憶體和暫存器變化,這樣過一遍不就啥都明白了嗎。
(Linux或Unix下可以在用GDB除錯時,看每句C對應的匯編并單步執行觀察相應記憶體和暫存器變化。)
想要從本質上理解C指標,必須學習C和匯編的對應關系。”
不是一回事!

不要迷信書、考題、老師、回帖;
要迷信CPU、編譯器、除錯器、運行結果。
并請結合“盲人摸太陽”和“駕船出海時一定只帶一個指南針。”加以理解。
任何理論、權威、傳說、真理、標準、解釋、想象、知識……都比不上擺在眼前的事實!

有人說一套做一套,你相信他說的還是相信他做的?
其實嚴格來說這個世界上古往今來所有人都是說一套做一套,不是嗎?

不要寫連自己也預測不了結果的代碼!

電腦記憶體或檔案內容只是一個一維二進制位元組陣列及其對應的二進制地址;
人腦才將電腦記憶體或檔案內容中的這個一維二進制位元組陣列及其對應的二進制地址的某些部分看成是整數、有符號數/無符號數、浮點數、復數、英文字母、阿拉伯數字、中文/韓文/法文……字符/字串、匯編指令、函式、函式引數、堆、堆疊、陣列、指標、陣列指標、指標陣列、陣列的陣列、指標的指標、二維陣列、字符點陣、字符筆畫的坐標、黑白二值圖片、灰度圖片、彩色圖片、錄音、視頻、指紋資訊、身份證資訊……

十字鏈表交換任意兩個節點C源代碼(C指標應用終極挑戰)http://download.csdn.net/detail/zhao4zhong1/5532495


話說我在哪都看到你灌水...
而且都是又臭又長.
有一些壓根就對不上題.......

uj5u.com熱心網友回復:

參考 53 樓 u014251353 的回復:
int *pa = (int *)((int)(&a) + 1);
(int)(&a)這個表示什么意思呢?


把a的地址轉換成了int, 此時在+1 不過是int + 1, 不是int *更不是 int *[5];

uj5u.com熱心網友回復:

參考 58 樓 mmc1206x 的回復:
Quote: 參考 28 樓 zhao4zhong1 的回復:

計算機組成原理→DOS命令→匯編語言→C語言(不包括C++)、代碼書寫規范→資料結構、編譯原理、作業系統→計算機網路、資料庫原理、正則運算式→其它語言(包括C++)、架構……

對學習編程者的忠告:
眼過千遍不如手過一遍!
書看千行不如手敲一行!
手敲千行不如單步一行!
單步源代碼千行不如單步對應匯編一行!

VC除錯時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編視窗、堆疊視窗、記憶體視窗和暫存器視窗看每句C對應的匯編、單步執行并觀察相應堆疊、記憶體和暫存器變化,這樣過一遍不就啥都明白了嗎。
對VC來說,所謂‘除錯時’就是編譯連接通過以后,按F10或F11鍵單步執行一步以后的時候,或者在某行按F9設了斷點后按F5執行停在該斷點處的時候。
(Turbo C或Borland C用Turbo Debugger除錯,Linux或Unix下用GDB除錯時,看每句C對應的匯編并單步執行觀察相應記憶體和暫存器變化。)

想要從本質上理解C指標,必須學習匯編以及C和匯編的對應關系。
從匯編的角度理解和學習C語言的指標,原本看似復雜的東西就會變得非常簡單!
指標即地址。“地址又是啥?”“只能從匯編語言和計算機組成原理的角度去解釋了。”
但我又不得不承認:
 有那么些人喜歡或者適合用“先具體再抽象”的方法學習和理解復雜事物;
 而另一些人喜歡或者適合用“先抽象再具體”的方法學習和理解復雜事物。
而我本人屬前者。

不要企圖依賴輸出指標相關運算式的值【比如printf("%p\n",...)】來理解指標的本質,
而要依賴除錯時的反匯編視窗中的C/C++代碼【比如void *p=...】及其對應匯編指令以及記憶體視窗中的記憶體地址和記憶體值來理解指標的本質。


這輩子不看記憶體地址和記憶體值;只畫鏈表、指標示意圖,畫堆疊示意圖,畫各種示意圖,甚至自己沒畫過而只看過書上的圖……能從本質上理解指標、理解函式引數傳遞嗎?本人深表懷疑!
這輩子不種麥不收麥不將麥粒拿去磨面;只吃饅頭、吃面條、吃面包、……甚至從沒看過別人怎么蒸饅頭,壓面條,烤面包,……能從本質上理解面粉、理解面食嗎?本人深表懷疑!!

提醒:
“學習用匯編語言寫程式”

“VC除錯(TC或BC用TD除錯)時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編視窗、堆疊視窗、記憶體視窗和暫存器視窗看每句C對應的匯編、單步執行并觀察相應堆疊、記憶體和暫存器變化,這樣過一遍不就啥都明白了嗎。
(Linux或Unix下可以在用GDB除錯時,看每句C對應的匯編并單步執行觀察相應記憶體和暫存器變化。)
想要從本質上理解C指標,必須學習C和匯編的對應關系。”
不是一回事!

不要迷信書、考題、老師、回帖;
要迷信CPU、編譯器、除錯器、運行結果。
并請結合“盲人摸太陽”和“駕船出海時一定只帶一個指南針。”加以理解。
任何理論、權威、傳說、真理、標準、解釋、想象、知識……都比不上擺在眼前的事實!

有人說一套做一套,你相信他說的還是相信他做的?
其實嚴格來說這個世界上古往今來所有人都是說一套做一套,不是嗎?

不要寫連自己也預測不了結果的代碼!

電腦記憶體或檔案內容只是一個一維二進制位元組陣列及其對應的二進制地址;
人腦才將電腦記憶體或檔案內容中的這個一維二進制位元組陣列及其對應的二進制地址的某些部分看成是整數、有符號數/無符號數、浮點數、復數、英文字母、阿拉伯數字、中文/韓文/法文……字符/字串、匯編指令、函式、函式引數、堆、堆疊、陣列、指標、陣列指標、指標陣列、陣列的陣列、指標的指標、二維陣列、字符點陣、字符筆畫的坐標、黑白二值圖片、灰度圖片、彩色圖片、錄音、視頻、指紋資訊、身份證資訊……

十字鏈表交換任意兩個節點C源代碼(C指標應用終極挑戰)http://download.csdn.net/detail/zhao4zhong1/5532495


話說我在哪都看到你灌水...
而且都是又臭又長.
有一些壓根就對不上題.......

農夫山泉和自來水都是水。

uj5u.com熱心網友回復:

GCC segmentation fault..............
test code:

#include<stdio.h>
#include<stdlib.h>

int main()
{
        int *p;
        int array[5] = {1,2,3,4,5};

        *p = (int*)((int)(&array)+1);

        printf("%x",*p);

        return 0;
}



這種變數都不初始化,亂用指標秀技巧的東西有什么用。。。。
規范編碼就是了
反正我這里報錯,根本就不允許上面代碼的情況出現
測驗環境:
linux
編譯器:
gcc

uj5u.com熱心網友回復:

參考 61 樓 u011368821 的回復:
GCC segmentation fault..............
test code:

#include<stdio.h>
#include<stdlib.h>

int main()
{
        int *p;
        int array[5] = {1,2,3,4,5};

        *p = (int*)((int)(&array)+1);

        printf("%x",*p);

        return 0;
}



這種變數都不初始化,亂用指標秀技巧的東西有什么用。。。。
規范編碼就是了
反正我這里報錯,根本就不允許上面代碼的情況出現
測驗環境:
linux
編譯器:
gcc

你都抄錯了代碼。。。

uj5u.com熱心網友回復:

參考 62 樓 lming_08 的回復:
Quote: 參考 61 樓 u011368821 的回復:

GCC segmentation fault..............
test code:

#include<stdio.h>
#include<stdlib.h>

int main()
{
        int *p;
        int array[5] = {1,2,3,4,5};

        *p = (int*)((int)(&array)+1);

        printf("%x",*p);

        return 0;
}



這種變數都不初始化,亂用指標秀技巧的東西有什么用。。。。
規范編碼就是了
反正我這里報錯,根本就不允許上面代碼的情況出現
測驗環境:
linux
編譯器:
gcc

你都抄錯了代碼。。。

樓主寫的int *pa = (int *)((int)(&a) + 1);
我沒明白我哪兒copy錯了。我只是改了一下變數名而已

uj5u.com熱心網友回復:

參考 29 樓 u013061236 的回復:

不明覺歷

arr 和&arr的區別主要就是做整數加法的時候

int arr[2];
arr + 1 和 &arr + 1,二者對1的偏移解釋不一樣,就是這么簡單,沒什么可糾結的
層主正解

uj5u.com熱心網友回復:

本人也是剛學的,學習學習

uj5u.com熱心網友回復:

參考 59 樓 mmc1206x 的回復:
Quote: 參考 53 樓 u014251353 的回復:

int *pa = (int *)((int)(&a) + 1);
(int)(&a)這個表示什么意思呢?


把a的地址轉換成了int, 此時在+1 不過是int + 1, 不是int *更不是 int *[5];


這個我知道。一個二進制的地址轉換成int型,然后是Int+1,然后再把這個Int轉換成指向Int的一個指標(地址),結果為什么會指向下一個陣列元素呢?這才是問題的關鍵。

uj5u.com熱心網友回復:

參考 66 樓 u014251353 的回復:
Quote: 參考 59 樓 mmc1206x 的回復:

Quote: 參考 53 樓 u014251353 的回復:

int *pa = (int *)((int)(&a) + 1);
(int)(&a)這個表示什么意思呢?


把a的地址轉換成了int, 此時在+1 不過是int + 1, 不是int *更不是 int *[5];


這個我知道。一個二進制的地址轉換成int型,然后是Int+1,然后再把這個Int轉換成指向Int的一個指標(地址),結果為什么會指向下一個陣列元素呢?這才是問題的關鍵。

int一次移動4位元組,這里只移動了1位元組。

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

參考 63 樓 u011368821 的回復:
Quote: 參考 62 樓 lming_08 的回復:

Quote: 參考 61 樓 u011368821 的回復:

GCC segmentation fault..............
test code:

#include<stdio.h>
#include<stdlib.h>

int main()
{
        int *p;
        int array[5] = {1,2,3,4,5};

        *p = (int*)((int)(&array)+1);

        printf("%x",*p);

        return 0;
}



這種變數都不初始化,亂用指標秀技巧的東西有什么用。。。。
規范編碼就是了
反正我這里報錯,根本就不允許上面代碼的情況出現
測驗環境:
linux
編譯器:
gcc

你都抄錯了代碼。。。

樓主寫的int *pa = (int *)((int)(&a) + 1);
我沒明白我哪兒copy錯了。我只是改了一下變數名而已

 *p = (int*)((int)(&array)+1);//你把int* 賦值給你int 你覺得呢?

uj5u.com熱心網友回復:

參考 70 樓 lis2012 的回復:
Quote: 參考 63 樓 u011368821 的回復:

Quote: 參考 62 樓 lming_08 的回復:

Quote: 參考 61 樓 u011368821 的回復:

GCC segmentation fault..............
test code:

#include<stdio.h>
#include<stdlib.h>

int main()
{
        int *p;
        int array[5] = {1,2,3,4,5};

        *p = (int*)((int)(&array)+1);

        printf("%x",*p);

        return 0;
}



這種變數都不初始化,亂用指標秀技巧的東西有什么用。。。。
規范編碼就是了
反正我這里報錯,根本就不允許上面代碼的情況出現
測驗環境:
linux
編譯器:
gcc

你都抄錯了代碼。。。

樓主寫的int *pa = (int *)((int)(&a) + 1);
我沒明白我哪兒copy錯了。我只是改了一下變數名而已

 *p = (int*)((int)(&array)+1);//你把int* 賦值給你int 你覺得呢?





我覺得你開始看過樓主的帖子再回復比較好,我只是照著LZ給出的代碼debug

uj5u.com熱心網友回復:

最后一個有問題int *pb = (int *)&a + 1;這個指向的是a[1], (int*)(&a+1)這個才是越界

這個值得再討論一下。我覺得應該沒有越界。電腦上剛重做系統,不然就實驗一下。

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

牛角尖有的時候還是挺關鍵的

uj5u.com熱心網友回復:

//char (*(*x[3])())[5];//x是什么型別的變數?
//
//分析C語言宣告,關鍵是搞清楚這個變數是個什么東西(函式、指標、陣列),
//是函式那么剩下的就是他的引數和回傳值,
//是指標那剩下部分是說明他指向什么,
//是陣列剩下的部分就是說明陣列的成員是什么型別。
//決議C語言宣告規則:
//從左側第一個識別符號開始,按照優先級進行結合。*表示是..的指標,const表示只讀的,volatile表示可變的,[]表示是陣列,()表示是函式。
//
//x和[3]結合說明是一個大小為3的陣列,該陣列指向了一個指標,該指標指向一個函式,該函式的無引數,回傳一個指標,該指標指向一個大小為5的char型陣列
#include <stdio.h>
#include <typeinfo.h>
char num[5];
char (*x00())[5] {
    return &num;
}
int main() {
    char (*x000)[5];//回傳值
    char (*(x00)())[5];//函式原型,引數為空,回傳值為指標
    char (*(*x0)())[5];//陣列的元素,是個函式指標
    char (*(*x[3])())[5];//是個陣列,大小為3

    x0 = x00;
    x[0] = x0;
    x[1] = x0;
    x[2] = x0;
    printf("typeid(x).name() is %s\n",typeid(x).name());
    return 0;
}
//typeid(x).name() is char (* (__cdecl**)(void))[5]

uj5u.com熱心網友回復:

看一遍懂一遍,下次看到又得懵一會,書上很多代碼都是這樣額。

uj5u.com熱心網友回復:

最簡單的理解,
指針+1,其實地址值加的不是1而是加的指針類型大小
數字+1,就是數字+1

int iBuf[2]={1,2};
int *iP=iBuf;
iP+1 -->指向的地址應該是 &iBuf[2]
上面這句也等於 (int*)(int(iP)+4)
int(iP)+1就不是&iBuf[2]了.

uj5u.com熱心網友回復:

參考 79 樓 lfs09 的回復:
最簡單的理解,
指針+1,其實地址值加的不是1而是加的指針類型大小
數字+1,就是數字+1

int iBuf[2]={1,2};
int *iP=iBuf;
iP+1 -->指向的地址應該是 &iBuf[2]
上面這句也等於 (int*)(int(iP)+4)
int(iP)+1就不是&iBuf[2]了.

表述有點錯誤
指針+1,其實地址值加的不是1而是加的指針類型大小
應該為
指針+1,其實地址值加的不是1而是加的指針所對應的數據類型大小

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

標籤:基礎類

上一篇:InstallShield問題咨詢

下一篇:InstallShield問題咨詢

標籤雲
其他(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)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more