-
出現此問題的原因是鍊表的建立功能有問題,問題所在圖中的紅框中。
這裡每個節點都使用乙個區域性變數,函式結束後,雖然本地堆疊的內容不會被清除,但記憶體會**,如果堆疊也被其他地方使用可能會分配給它,記憶體內容就會發生變化。 執行此操作的正確方法是請求堆記憶體。 使用 malloc 函式並包含標頭檔案 include。
將框中的**替換為:
struct student *b = struct student*)malloc(sizeof(struct student));
b->next = null;
b->num = 2;
struct student *a = struct student*)malloc(sizeof(struct student));
a->next = b;
a->num = 1;
struct student *head=a;
-
C 語言中的指標和陣列很有趣。
例如,如果定義乙個陣列 a[10],則可以通過 a[1] 訪問其中的元素,也可以使用 *(a 1) 訪問它。
為什麼這樣使用?
ptr 的型別是 (int *),因此 ptr 儲存在記憶體中的是 int 型別的指標,指向 int 位址。 在正常情況下,您可以通過 PTR 訪問它指向的某個位址中的資料,如下圖 22 所示。
這裡的程式裡有乙個malloc函式,它的作用是申請空間,本來只有乙個空間,申請後可以有很多連續的空間。 這時,如果 ptr 0000001 加 1 中的值指向 22 以下的空間,就可以繼續儲存東西了,如圖所示。
這就是指標的用武之地,它直接控制位址空間。 ptr[i] 與 *(ptr i) 的含義相同。
所以當 scanf 時,你可以直接把一些東西放到 ptr[i] 的位址。
同樣,char *p 也可以變成乙個陣列,只要你給它空間。 這在資料結構和演算法中用得很多,也很有趣,但很容易讓人頭暈目眩。
-
指標變數的定義。
指標變數有三個屬性:
1) 指標變數指向的變數型別。例如,i 指標指向的變數 i 是乙個整數。
2)指標變數在記憶體中占用多少個記憶體單元。例如,如果 i 指標占用兩個記憶體單元,則稱為“近指標”,用 near 表示。 如果變數在記憶體中占用 4 個記憶體單元,則稱為“遠指標”,用遠表示。
如果未指定 NEAR 或 FAR,則預設值為 NEAR。 (指標變數在記憶體中占用 2 或 4 個記憶體單元)。
3)指標變數指向哪個變數,即指標變數的值是多少。例如,i 指標的值為 2000。
指標變數定義的一般形式:
型別識別符號 * 識別符號。
“表示定義了指標變數。
“識別符號”是指標變數的名稱。
Type Identifier 指示指標變數指向的變數型別。
例如,int i, j; 定義兩個整數變數
int *pointer_1, *pointer_2;
float *pointer_3;
char *pointer_4;
void *pointer_5;
char far *pointer_6;
指標變數的賦值:示例、
pointer_1 = &i;
pointer_2 = &j;
pointer_1 = 100;
您還可以在定義指標變數的同時指定指標變數的初始值,例如
int a;
int *p = &a;
-
int a;
a=20;int *pa=&a;
printf("%d",*pa);
這種做法是錯誤的! 原因是 C 中的變數是先用的,後用,C 中的變數是在語句的開頭定義的,但在 C++ 中,它們可以隨用隨到地定義。
**mr computer
-
不,我用 VS2005 嘗試過,兩種方法都有效,沒有錯。
-
我沒有發現任何錯誤,我可以發布你們所有的程式碼嗎?
-
1.概念不同。
“指標”是乙個概念,“指標變數”是乙個具體的實現,指標也是乙個變數,所以需要定義,指標的定義和一般變數是一樣的。
2.儲存位址不同。
變數的(記憶體)位址稱為指向該變數的“指標”,指標可以找到帶有其位址的記憶體單元。 指標變數用於儲存另乙個變數(即指標)的位址。
指標和指標變數之間的關係。
1.指標是位址,位址是指標。
2.位址是儲存單元的編號。
3. 指標變數是儲存記憶體位址的變數。
4. 指標和指標變數是兩個不同的概念,但需要注意的是,通常我們在描述指標變數時會把指標稱為指標,但實際上它們有不同的含義。
指標的優點:
1.直接訪問硬體。
2.快速傳輸資料(指標指示位址)。
3. 返回多個值並返回乙個值(指向陣列或結構的指標) 4.表示複雜的資料結構(結構體)。
5.方便處理字串。
6. 指標有助於理解物件導向。
-
更嚴格的說法是:
系統為每個儲存單元分配乙個位址值,C++ 稱之為“指標”。 如果有 int i=5; ,儲存變數 i 的儲存單元的編號(位址)& i 稱為指標。
“指標變數”是儲存上面提到的“位址值”的變數,也可以表示為儲存變數占用的記憶體空間的“第乙個位址”的變數(因為乙個變數通常在一行中占用多個位元組的空間)。 例如,int i=5; 有一句話int *p=&i;,則 i 的指標 &i 被分配給 int * 指標變數 p,這意味著 &i 儲存在 p 中。 因此,指標變數是儲存指標的變數。
值得注意的是,有許多資料和教科書沒有做出上述區分,而是認為“指標是指標變數的縮寫”,例如 int *p=&i;解釋是:宣告乙個int *指標p,用變數i的位址初始化; 嚴格來說,你應該宣告乙個 int * 指標變數 p。 因此,有時有必要根據上下文來理解本書的精髓,在文字表達上不要過於死板。
-
C++ 中的指標是指向資料儲存位址的位址,例如 int
a;intp=&a,表示變數 a 的位址; 指標變數是將資料儲存在乙個變數中的位址,首先在變數中找到位址,然後從這個位址找到資料,所以基本是一樣的。
-
空指標的定義略有不同。
在 C 中:定義
nullvoid*)0
在 C++ 中:定義
null0 和數字 0 是唯一可以直接分配給指標的值。
此外,類成員、指標等型別在 C++ 中不可用。
-
指標是位址,指標變數是儲存位址的變數。
指標的基本概念。
在計算機中,所有資料都儲存在記憶體中。
通常,記憶體中的乙個位元組稱為記憶體單元,不同資料型別占用的記憶體單元數各不相同,例如整數為 2 個單位,字元為 1 個單位。 為了正確訪問這些儲存單元,必須對每個儲存單元進行編號。
記憶單元可以通過其編號準確定位。 儲存單元的編號也稱為位址。
由於您可以通過其編號或位址找到所需的儲存單元,因此通常將此位址稱為指標。
對於儲存單元,單元的位址是指標,儲存在其中的資料是單元的內容。 在 C 語言中,允許將指標儲存在變數中,這稱為指標變數。 因此,指標變數的值是記憶單元的位址,或稱為記憶單元的指標。
-
變數的(記憶體)位址稱為指向該變數的“指標”,指標可以找到帶有其位址的記憶體單元。 指標變數用於儲存另乙個變數(即指標)的位址。
-
實際上,它與“整數”和“整數變數”的區別相同。
簡單來說,“指標”是乙個位址,“指標變數”是乙個位址的值。
-
指標的概念是C C++的重要元素之一,它是一種儲存指定型別資料位址的變數,而相同型別的變數儲存資料。
顧名思義,指標變數是乙個變數,其值是可變的,與整數變數、浮點變數等的命名約定完全相同。
“指標”是概念,“指標變數”是具體實現。
-
首先要了解什麼是指標,指標是一段記憶體的位址,指標變數是用來儲存這個位址的,也就是說,指標變數儲存在指標中,就像整數變數儲存在整數中一樣。
-
指標變數是儲存位址的變數,通常在定義整數和實心等變數後,系統會給變數分配一定的記憶體來儲存資料,通過定義指標變數分配給它的空間用於儲存位址。 並且只能儲存位址。
-
指標是 C 語言的精髓,通過使用指標,我們可以充分利用記憶體資源並使其盡可能高效。 借助指標技術,我們可以描述複雜的資料結構,字串的處理可以更加靈活,陣列的處理可以更加方便,程式的編寫簡潔、高效、令人耳目一新。 但是因為手指是給初學者的,所以很難理解和掌握。
掌握需要一定的計算機硬體知識作為基礎,這需要更多的練習和更多的動手工作,才能在實踐中盡快掌握,成為C語言的高手。
過去,當我們在程式設計中定義或描述變數時,編譯系統會給定義的變數分配相應的記憶體單元,即每個變數在記憶體中有乙個固定的位置和乙個特定的位址。 由於變數的資料型別不同,它所占用的記憶體單元數也不同。 如果我們在程式中定義它:
int a=1,b=2;
float x=, y = 4 . 5 ;
double m=;
char ch1='a', ch2='b';
讓我們看一下構建系統如何為變數分配記憶體。 變數 a 和 b 是整數變數,每個變數在記憶體中佔 2 個位元組; x 和 y 是實數型別,每個佔 4 個位元組; m 為雙精度實數型別,占用 8 個位元組; ch1 和 ch2 是基於字元的,每個佔乙個位元組。 由於計算機記憶體是按位元組定址的,變數的儲存從2000個記憶體單元開始,因此編譯系統在記憶體中變數的位置如圖6-1所示。
例如,變數A在記憶體中的位址為2000,占用兩個位元組後,變數B的記憶體位址為2002,變數M的記憶體位址為2012。 訪問記憶體中變數,用於 scanf("%d%d%f", &a, &b, &x) 表示由將輸入資料的變數的位址指示的記憶體單元。然後,要訪問乙個變數,你應該首先在記憶體中找到它的位址,或者換句話說,乙個唯一指向記憶體變數的位址,我們稱之為位址。
指向變數的指標。 如果變數的位址儲存在記憶體的特定區域中,並且位址儲存在變數中,則此類變數是指標變數,通過指向對它所指向的變數的訪問,對變數進行一種“間接訪問”。
一組指標變數 pa、pb、px、py、pm、pch1 和 pch2 分別指向上述變數 a、b、x、y、m、ch1 和 ch2,指標變數也儲存在記憶體中,如圖 6-2 所示
在圖 6-2 中,左側所示的記憶體儲存了指標變數的值,該值給出了引用變數的位址,通過該位址可以訪問右側描述的變數。 例如,如果指標變數 pa 的值為 2000,則它是變數 a 在記憶體中的位址。 因此,pa 指向變數 a。
變數的位址是指標,儲存指標的變數是指標變數。
範圍。 你靜態字元 *chh;
static char *ch1;雖然兩個指標指向的位址沒有變化,但你有沒有想過它們指向的記憶體位址是否已經釋放,char chc[10]; 它是本地的,函式已經結束,生命週期已經結束,你正在嘗試使用 void times() 中的指標訪問它。 >>>More
我見過這樣的問題,我不明白你的意思,但我認為是這樣的,結構; 我打了...... 您可以在其中新增所有資料形式的定義,例如 int >>>More
好像你對結構體和結構體指標不太了解,資料陣列是你定義的乙個結構體陣列,它由兩個結體元素組成,每個結構體元素包含兩個成員 x 和 y,第乙個元素是 1 和 10,第二個元素是 2 和 20,你定義的結構指標 p 開始指向陣列資料的第乙個元素, P 指向資料陣列的第二個元素,指標 P 可以操作兩個成員 x 和 y >>>More
2006年底應計壞賬準備:1,200,000 * 3% = 36,000
2006年10月,已確認為無法收回的應收賬款12,500元作為“壞賬”處理,會計分錄記入:壞賬準備12,500元 >>>More