主頁 > 後端開發 > 【技識訓累】C語言中的指標【一】

【技識訓累】C語言中的指標【一】

2023-06-24 07:33:33 後端開發

C語言中的指標是什么

在C語言中,指標是一個變數,它存盤的是記憶體地址,指標變數可以指向任何型別的資料,如整數、字符、浮點數或其他指標,通過指標可以間接訪問和操作變數的值,

指標的主要目的是允許程式直接訪問記憶體,而不是通過變數名來訪問,這對于一些高級的編程任務,如動態記憶體分配、資料結構和函式指標等非常有用,

指標可以用來實作以下幾個方面的功能:

  1. 記憶體管理:通過指標,可以動態地分配和釋放記憶體,這在需要靈活管理記憶體的情況下非常有用,比如動態陣列、鏈表、樹等資料結構,

  2. 陣列訪問:指標可以用來遍歷和訪問陣列中的元素,可以通過指標算術運算來移動指標位置,從而訪問陣列中的不同元素,

  3. 傳遞引數:可以通過指標將變數的地址傳遞給函式,從而在函式內部修改變數的值,這樣可以避免函式內部創建新的變數,節省記憶體開銷,

  4. 字串處理:C語言的字串是以字符陣列的形式存盤的,通過指標可以方便地處理字串,比如拷貝、連接、比較等操作,

  5. 動態分配記憶體:通過指標,可以使用標準庫函式malloc()或calloc()動態地分配記憶體,這在需要根據程式運行時的需要分配不同大小的記憶體時非常有用,

需要注意的是,指標也有一些潛在的問題和風險,比如,未初始化的指標可能會導致程式崩潰,指標還可能引發記憶體泄漏或非法記憶體訪問等問題,因此在使用指標時需要謹慎,

總體而言,指標是C語言中非常強大和靈活的概念,但同時也需要謹慎使用,因為指標操作涉及底層的記憶體管理和訪問,容易引發記憶體泄漏、段錯誤等問題,

指標和變數的區別是什么

在C語言中,指標和變數是兩個不同的概念,它們有以下幾點區別:

1. 定義方式:變數需要先宣告后定義,而指標需要先宣告后使用,例如,變數的定義可以直接寫為:int a;而指標需要先宣告指標變數型別,然后通過取地址符&來獲取變數的地址,

2. 存盤內容:變數存盤的是具體的數值或資料,而指標存盤的是變數或物件的地址,

3. 記憶體占用:變數在記憶體中會占據一定的存盤空間,而指標變數只會占據指標的固定大小(通常為4或8個位元組,取決于系統的位數),

4. 用途:變數用于存盤資料值,而指標主要用于動態記憶體分配、變數間的傳遞、資料結構等,

5. 操作:變數可以直接對其進行算術運算、邏輯運算等操作,而指標主要用于訪問指向的物件或變數,可以通過解參考運算子*來獲取指標指向的值,

總結來說,變數存盤具體數值,而指標存盤的是變數或物件的地址,指標是對變數的一種間接參考方式,通過指標,我們可以在程式中更加靈活地對記憶體進行操作,動態分配記憶體和傳遞變數,

如何獲取一個變數的地址

在C語言中,可以通過"取地址運算子(&)"來獲取一個變數的地址,取地址運算子(&)可以在變數名前使用,以獲取該變數的記憶體地址,

例如,假設有一個整型變數x,要獲取它的地址,可以使用以下代碼:

int x;
int *p; /* 定義一個指標變數p */

p = &x; /* 將x的地址賦值給p */

在上面的代碼中,"&x"表示獲取變數x的地址,將這個地址賦值給指標變數p,然后,p就指向了x的地址,

需要注意的是,變數的地址是一個記憶體地址,通常以十六進制顯示,在C語言中,可以使用"%p"格式說明符列印變數的地址,例如:

printf("x的地址是:%p\n", p);

輸出結果可能類似于:x的地址是:0x7ffe5b6a09e8,這個地址表示變數x在記憶體中的位置,

通過獲取變數的地址,可以用指標來訪問和修改該變數,例如,可以使用"*"運算子來表示指標所指向的記憶體的值,例如:

printf("x的值是:%d\n", *p);

輸出結果就是變數x的值,

總結起來,要獲取變數的地址,可以使用取地址運算子(&);要獲取指標所指向的記憶體的值,可以使用"*"運算子,這些操作在C語言中常用于指標和記憶體管理,

如何宣告一個指標變數?

在C語言中,宣告一個指標變數需要使用星號符號(*)來表示該變數是一個指標,指標變數的宣告需要指定指標所指向的資料型別,

宣告一個指標變數的一般語法如下:

data_type *pointer_name;

其中,data_type表示指標所指向的資料型別,pointer_name表示指標變數的名稱,例如,宣告一個指向整數型別的指標變數numPtr,可以使用以下代碼:

int *numPtr;

在這個例子中,int是指標所指向的資料型別,numPtr是指標變數的名稱,

需要注意的是,指標變數的宣告只是創建了一個指標變數,在宣告時并沒有為指標分配記憶體空間,如果在宣告時要將指標指向一個變數或者分配記憶體空間,可以使用賦值運算子和取地址符號,

例如,將指標變數numPtr指向一個整數變數num,可以使用以下代碼:

int num = 10;
int *numPtr;
numPtr = #

在這個例子中,&符號用于獲取變數num的地址(即指標所指向的地址),然后將這個地址賦值給指標變數numPtr,

如何使用指標作為函式的引數?

在C語言中,可以通過指標作為函式的引數來實作在函式內部修改外部變數的值,這樣可以避免傳遞大量的資料拷貝,提高程式的效率,

下面是一個使用指標作為函式引數的案例:

#include <stdio.h>

// 函式原型
void swap(int *a, int *b);

int main() {
   int x = 10;
   int y = 20;
   
   printf("交換前:\n");
   printf("x = %d\n", x);
   printf("y = %d\n", y);
   
   // 呼叫交換函式
   swap(&x, &y);
   
   printf("交換后:\n");
   printf("x = %d\n", x);
   printf("y = %d\n", y);
   
   return 0;
}

// 交換函式
void swap(int *a, int *b) {
   int temp;
   temp = *a;
   *a = *b;
   *b = temp;
}

在上述例子中,我們定義了一個名為swap的函式,該函式接受兩個整型指標作為引數,在主函式中,我們宣告了兩個整型變數x和y,并將它們的初始值分別設定為10和20,

然后,我們呼叫了swap函式,并傳遞了x和y的地址作為引數,在swap函式內部,我們宣告了一個臨時變數temp,用于存盤需要交換的值,通過解參考指標,我們可以訪問并修改指標指向的變數,

最后,我們在主函式中列印了交換后的結果,

運行上述程式,輸出將是:

交換前:
x = 10
y = 20
交換后:
x = 20
y = 10

通過將指標作為函式引數傳遞,我們可以在函式內部修改外部變數的值,從而實作了交換兩個變數的功能,

在C語言中,可以使用指標來訪問變數的值,指標是一個變數,它存盤了一個記憶體地址,通過指標,我們可以通過記憶體地址訪問并修改變數的值,

下面是使用指標訪問變數的值的方法:

1. 宣告指標變數:首先要宣告一個指標變數,以便存盤變數的地址,宣告指標變數的方法是在變數前面加上星號(*),例如:int *ptr;,

2. 初始化指標變數:在使用指標之前,必須為指標變數分配記憶體,可以使用&運算子獲取變數的地址,并將其賦值給指標變數,例如:int num = 10; int *ptr = &num;這里,&num表示變數num的地址,

3. 通過指標訪問變數的值:可以使用星號(*)運算子通過指標訪問變數的值,例如:printf("%d", *ptr);,這里*ptr表示指標所指向的變數的值,

4. 修改變數的值:通過指標,可以修改指標指向的變數的值,例如:*ptr = 20;,這里*ptr表示指標所指向的變數,將其值修改為20,

如何使用指標訪問變數的值?

下面是一個完整的示例代碼,說明了如何使用指標訪問變數的值:

#include <stdio.h>

int main() {
    int num = 10;
    int *ptr = &num; // 初始化指標變數

    printf("變數的值:%d\n", num);
    printf("指標所指向的變數的值:%d\n", *ptr);

    *ptr = 20; // 修改變數的值

    printf("修改后的變數的值:%d\n", num);
    printf("修改后,指標所指向的變數的值:%d\n", *ptr);

    return 0;
}

這段代碼首先宣告一個整型變數num,然后宣告一個指向整型變數的指標變數ptr,通過&運算子獲取變數num的地址,并將其賦值給ptr,然后,通過*ptr訪問num的值,并通過*ptr = 20將num的值修改為20,最后通過printf函式列印出相應的結果,

輸出結果為:

變數的值:10
指標所指向的變數的值:10
修改后的變數的值:20
修改后,指標所指向的變數的值:20

這說明通過指標可以訪問并修改變數的值,

如何使用指標回傳函式的值?

使用指標回傳函式的值可以通過以下步驟實作:

1. 定義回傳值型別為指標型別的函式,例如,如果要回傳一個整數型別的指標,可以使用int* functionName(),
2. 在函式內部,使用new關鍵字動態分配一個新的變數,并將其賦值給該指標,例如,int* ptr = new int;,
3. 對該指標進行其他操作,如賦值或計算等,
4. 使用return陳述句回傳指標的值,例如,return ptr;,
5. 在呼叫函式的地方,使用一個指標變數來接收函式的回傳值,例如,int* result = functionName();,
6. 使用接收到的指標變數,可以通過解參考運算子*來訪問函式回傳的值,例如,int value = https://www.cnblogs.com/yyyyfly1/archive/2023/06/24/*result;,
7. 在使用完回傳的指標值后,需要使用delete關鍵字將其釋放,以避免記憶體泄漏,例如,delete result;,

下面是一個示例代碼:

#include <iostream>

// 使用指標回傳函式的示例函式
int* createInteger() {
    int* ptr = new int;
    *ptr = 10;
    return ptr;
}

int main() {
    int* result = createInteger();
    std::cout << *result << std::endl; // 輸出"10"
    delete result;
    
    return 0;
}

注意:在使用指標回傳函式的值時,需要小心避免記憶體泄漏,確保在不再需要使用回傳的指標值時,及時使用delete釋放記憶體,

如何使用指標函式

在C語言中,指標陣列是一個陣列,其元素為指標型別,它可以用于存盤多個指標,并通過索引訪問和操作這些指標,

下面是一個使用指標陣列的示例:

#include <stdio.h>

int main() {
    int num1 = 10, num2 = 20, num3 = 30;
    int *ptrArr[3];  // 宣告一個指標陣列,包含3個指標元素

    ptrArr[0] = &num1;  // 將num1的地址存盤到指標陣列的第一個元素
    ptrArr[1] = &num2;  // 將num2的地址存盤到指標陣列的第二個元素
    ptrArr[2] = &num3;  // 將num3的地址存盤到指標陣列的第三個元素

    printf("Value of num1: %d\n", *ptrArr[0]);  // 輸出num1的值
    printf("Value of num2: %d\n", *ptrArr[1]);  // 輸出num2的值
    printf("Value of num3: %d\n", *ptrArr[2]);  // 輸出num3的值

    return 0;
}

運行上述代碼,將得到以下輸出:

Value of num1: 10
Value of num2: 20
Value of num3: 30

該示例中,我們首先宣告了一個指標陣列ptrArr,其包含了3個元素,每個元素都是一個整型指標,然后,我們分別將num1、num2和num3的地址分別存盤到ptrArr的第一個、第二個和第三個元素中,

通過ptrArr[x]的方式,我們可以訪問并操作指標陣列中的指標元素,而通過*ptrArr[x]的方式,我們可以訪問指標指向的值,

通過使用指標陣列,我們可以方便地管理和操作多個指標,并且在函式之間傳遞多個指標也更加方便,

如何使用指向指標的指標

在C語言中,指向指標的指標是一種特殊的指標型別,它可以用于存盤和操作其他指標的地址,通過使用指向指標的指標,可以創建指向指標的指標鏈,從而在一次間接參考中訪問多級指標,

定義指向指標的指標時,需要使用兩個星號(**)表示,例如,下面是一個指向整型指標的指標的定義:

int **ptr;

接下來,我們來看一些使用指向指標的指標的常用操作:

1. 分配記憶體:可以使用指向指標的指標來動態分配記憶體,首先,使用malloc或calloc函式分配一塊記憶體,并將其地址分配給第一級指標,然后,使用第一級指標的地址分配給第二級指標,

int **ptr;
int *p;
int value = https://www.cnblogs.com/yyyyfly1/archive/2023/06/24/10;

p = (int *)malloc(sizeof(int));
*p = value;
ptr = &p;

2. 間接參考:可以使用指向指標的指標進行多級間接參考以獲取所指向的值,對于上面的示例,可以通過以下方式獲取value的值:

int result = **ptr;
printf("%d", result);   // 輸出:10

3. 傳遞指標的指標:指向指標的指標還可以作為函式引數傳遞,以便在函式中修改指標的值,對于需要修改指標本身的情況,傳遞指標的指標非常有用,

void modifyPointer(int **ptr) {
    int *p;
    int value = https://www.cnblogs.com/yyyyfly1/archive/2023/06/24/20;

    p = (int *)malloc(sizeof(int));
    *p = value;
    *ptr = p;
}

int main() {
    int *p;
    int **ptr;
    int value = 10;

    p = (int *)malloc(sizeof(int));
    *p = value;
    ptr = &p;

    printf("%d\n", **ptr);   // 輸出:10

    modifyPointer(ptr);

    printf("%d\n", **ptr);   // 輸出:20

    return 0;
}

在上面的示例中,首先創建一個指向整型指標的指標ptr,并將其用作modifyPointer函式的引數,在modifyPointer函式中,創建一個新的整型指標p,并將其地址分配給*ptr,這樣,通過修改傳遞給函式的指標的指標,可以間接修改ptr的值,

總結來說,使用指向指標的指標可以實作對多級指標的訪問和修改,以及提供動態分配記憶體的靈活性,它在處理復雜的資料結構和動態記憶體分配時非常有用,

如何動態分配記憶體

在C語言中,動態分配記憶體是通過使用標準庫函式malloc、calloc和realloc來實作的,

1. malloc函式:malloc函式用于分配指定大小的記憶體塊,并回傳指標,它的函式原型如下:

   void* malloc(size_t size);

   引數size表示要分配的記憶體塊的大小,以位元組為單位,如果分配成功,則回傳指向該記憶體塊的指標;如果分配失敗,則回傳NULL,

   例如,下面的代碼將分配一個大小為10個int型別變數的記憶體塊:

   int* ptr = malloc(10 * sizeof(int));
   if (ptr != NULL) {
       // 分配成功
   } else {
       // 分配失敗
   }

2. calloc函式:calloc函式與malloc函式類似,用于分配指定大小的記憶體塊,并回傳指標,但與malloc不同的是,calloc會在分配記憶體塊的同時將其初始化為零,它的函式原型如下:

   void* calloc(size_t num, size_t size);

   引數num表示要分配的元素的個數,引數size表示每個元素的大小,以位元組為單位,如果分配成功,則回傳指向該記憶體塊的指標;如果分配失敗,則回傳NULL,

   例如,下面的代碼將分配一個大小為10個int型別變數的記憶體塊,并將其初始化為零:

   int* ptr = calloc(10, sizeof(int));
   if (ptr != NULL) {
       // 分配成功
   } else {
       // 分配失敗
   }

3. realloc函式:realloc函式用于重新分配已分配記憶體塊的大小,以便更改其大小,它的函式原型如下:

   void* realloc(void* ptr, size_t size);

   引數ptr是指向已分配記憶體塊的指標,引數size表示要重新分配的記憶體塊的大小,以位元組為單位,如果分配成功,則回傳指向重新分配后的記憶體塊的指標;如果分配失敗,則回傳NULL,需要注意的是,realloc函式可能會將已分配的記憶體塊移動到新的位置,因此在使用realloc重新分配記憶體之后,應該始終更新指標,

   例如,下面的代碼將重新分配之前已分配的記憶體塊的大小為20個int型別變數的記憶體塊:

   int* ptr = realloc(ptr, 20 * sizeof(int));
   if (ptr != NULL) {
       // 重新分配成功
   } else {
       // 重新分配失敗
   }

需要注意的是,在使用完動態分配的記憶體后,應使用free函式將其釋放,以避免記憶體泄漏,free函式的函式原型如下:

void free(void* ptr);

引數ptr是指向要釋放的記憶體塊的指標,例如,下面的代碼釋放了先前分配的記憶體塊:

free(ptr);

如何比較指標的值

在C語言中比較指標的值,可以通過使用關系運算子來比較指標的地址,具體來說,C語言中可以使用以下關系運算子來比較指標的值:

1. "==":比較兩個指標是否指向同一個地址,即判斷兩個指標是否相等,例如,指標p和指標q,可以通過p == q來判斷它們是否相等,

2. "!=":比較兩個指標是否指向不同的地址,即判斷兩個指標是否不相等,例如,指標p和指標q,可以通過p != q來判斷它們是否不相等,

需要注意的是,指標的比較是比較它們的地址,而不是它們所指向的值,因此,即使兩個指標所指向的值相等,它們的地址也可能不同,從而使得指標比較的結果為不相等,例如:

int* p = malloc(sizeof(int));
int* q = malloc(sizeof(int));
*p = 5;
*q = 5;
if (p == q) {
    printf("p and q point to the same address.\n");
} else {
    printf("p and q point to different addresses.\n");
}

在上面的例子中,p和q分別指向了兩塊不同的記憶體空間,盡管它們所指向的值均為5,但由于它們的地址不同,所以它們的比較結果為不相等,

如何在結構體中使用指標

在C語言中,結構體是一種自定義的資料型別,可以包含多個不同型別的元素,指標是一種特殊型別的變數,用來存盤記憶體地址,

我們可以在結構體中使用指標來實作動態記憶體分配和參考其他變數,具體來說,可以在結構體中宣告指向其他型別的指標,也可以在指標中存盤結構體的地址,

下面是一些使用指標的結構體示例:

1. 在結構體中宣告指標:

struct student {
   char name[50];
   int age;
   float marks;
   int* rollNumber;
};


在這個例子中,rollNumber是一個指向 int 型別的指標,

2. 動態分配記憶體:

struct student s;
s.rollNumber = (int*)malloc(sizeof(int));


這個例子中,我們使用 malloc 函式為 rollNumber 指標分配了一塊 int 型別的記憶體空間,

3. 訪問指標指向的變數:

*(s.rollNumber) = 10;


通過將值賦給 *(s.rollNumber),我們實際上是在給指標指向的變數賦值,

4. 通過指標訪問結構體成員:

struct student *p;
p = &s;


在這個例子中,我們宣告了一個指向 student 結構體的指標 p,并將其指向結構體 s,

5. 使用指標訪問結構體成員:

printf("Name: %s\n", (*p).name);
printf("Age: %d\n", (*p).age);
printf("Marks: %.2f\n", (*p).marks);
printf("Roll Number: %d\n", *(*p).rollNumber);


在這個例子中,我們使用了 (*p). 的語法來訪問結構體成員,(*p).name 表示訪問指標 p 所指向的結構體的 name 成員,

當然,也可以使用另一種更簡潔的語法來訪問結構體成員:

printf("Name: %s\n", p->name);
printf("Age: %d\n", p->age);
printf("Marks: %.2f\n", p->marks);
printf("Roll Number: %d\n", *(p->rollNumber));


使用 -> 符號可直接訪問指標所指向的結構體的成員,

結構體中使用指標可以幫助實作動態記憶體分配和在結構體中參考其他變數,這種靈活性使得結構體更加強大和多樣化,

在黑夜里夢想著光,心中覆寫悲傷,在悲傷里忍受孤獨,空守一絲溫暖, 我的淚水是無底深海,對你的愛已無言,相信無盡的力量,那是真愛永在, 我的信仰是無底深海,澎湃著心中火焰,燃燒無盡的力量,那是忠誠永在,

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

標籤:其他

上一篇:Spring

下一篇:返回列表

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

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • 【技識訓累】C語言中的指標【一】

    博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ......

    uj5u.com 2023-06-24 07:33:33 more
  • Spring

    # 1、Spring ## 1.1、簡介 - spring :春天———>給軟體行業帶來了春天! - 2002,首次退出Springkuang框架雛形,interface21框架! - spring 框架即以interface21框架為基礎,經過重新設計,不斷豐富其內涵,于2004年3月24日發布1 ......

    uj5u.com 2023-06-24 06:54:57 more
  • 一文了解函式設計的最佳實踐

    # 1. 引言 良好設計的函式具有清晰的職責和邏輯結構,提供準確的命名和適當的引數控制。它們促進代碼復用、支持團隊協作,降低維護成本,并提供可測驗的代碼基礎。通過遵循最佳實踐,我們能夠撰寫出高質量、可讀性強的代碼,從而提高開發效率和軟體質量。下面我們將一一描述函式設計時能夠遵循的最佳實踐。 # 2. ......

    uj5u.com 2023-06-23 07:46:17 more
  • 一文了解函式設計的最佳實踐

    # 1. 引言 良好設計的函式具有清晰的職責和邏輯結構,提供準確的命名和適當的引數控制。它們促進代碼復用、支持團隊協作,降低維護成本,并提供可測驗的代碼基礎。通過遵循最佳實踐,我們能夠撰寫出高質量、可讀性強的代碼,從而提高開發效率和軟體質量。下面我們將一一描述函式設計時能夠遵循的最佳實踐。 # 2. ......

    uj5u.com 2023-06-23 07:45:11 more
  • 一文了解Go語言的函式

    # 1. 引言 函式是編程中不可或缺的組成部分,無論是在`Go`語言還是其他編程語言中,函式都扮演著重要的角色。函式能夠將一系列的操作封裝在一起,使得代碼更加模塊化、可重用和易于維護。 在本文中,我們將詳細介紹Go語言中函式的概念和使用方法,包括函式的定義、引數和回傳值、呼叫方式、可變引數、函式作為 ......

    uj5u.com 2023-06-22 07:42:11 more
  • celery筆記五之訊息佇列的介紹

    > 本文首發于公眾號:Hunter后端 > 原文鏈接:[celery筆記五之訊息佇列的介紹](https://mp.weixin.qq.com/s/fw7b1Gha0XpTYuCg3aZcWA) 前面我們介紹過 task 的處理方式,將 task 發送到佇列 queue,然后 worker 從 qu ......

    uj5u.com 2023-06-22 07:42:04 more
  • C++面試八股文:用過STL嗎?

    某日二師兄參加XXX科技公司的C++工程師開發崗位第21面: > 面試官:用過STL嗎? > > 二師兄:(每天都用好嗎。。)用過一些。 > > 面試官:你知道STL是什么? > > 二師兄:STL是指標準模板庫(`Standard Template Library`),是C++區別于C語言的特征之 ......

    uj5u.com 2023-06-22 07:41:59 more
  • Scala泛型

    # 泛型的定義 ```Scala object _11_泛型 { def main(args: Array[String]): Unit = { //[A] 這個代表的就是泛型 ==》 在創建物件的時候,可以指定需要傳進去的型別 //作用就是在創建物件的時候,可以對傳進去的引數一個約束,當設定泛型位 ......

    uj5u.com 2023-06-22 07:41:54 more
  • 現代C++學習指南-具體類

    > 類作為C++中重要的概念之一,有著眾多的特性,也是最迷人的部分! 類是一個加工廠,開發者使用C++提供的各種材料組裝這個工廠,使得它可以生產出符合自己要求的資料,通過對工廠的改造,可以精細控制物件從出生到死亡的各種行為,真正達到我的代碼我做主的境界。 ### 類 我們經常說的面向物件三大特征:封 ......

    uj5u.com 2023-06-22 07:41:49 more
  • 【python基礎】類-模塊

    隨著不斷給類添加功能,檔案可能變得很長,即便妥善地使用了繼承亦是如此,為遵循Python的總體理念,應讓檔案盡可能簡潔。為在這方面提供幫助,Python允許將類存盤在模塊中,然后在主程式中匯入所需的模塊。 # 1.匯入單個類 新建一個Animal類的模塊,其中只包含Animal類,撰寫程式如下所示: ......

    uj5u.com 2023-06-22 07:41:39 more