主頁 > 軟體設計 > C參考傳遞

C參考傳遞

2022-06-28 18:59:43 軟體設計

我希望這個函式在鏈表的開頭添加一個點:

void addPoint(Point *head, int x, int y, SDL_bool dir) {
    Point *p = malloc(sizeof *p);
    p->x = x;
    p->y = y;
    p->dir = dir;
    p->next = head;
    head = p;
}

頭部初始化較早,如下所示:

Point *down = NULL;

之后我像這樣呼叫函式:

addPoint(&down, x * grid_cell_width, (y - 1) * grid_cell_height, SDL_FALSE);

不幸的是,這不起作用,因為在呼叫之后頭部仍然為 NULL。

uj5u.com熱心網友回復:

您正在傳遞一個指向 的指標,這意味著您正在傳遞一個函式head地址的副本在您更改值的行中,您實際上是在修改本地指標。要更改它,您需要將指標傳遞給指標,如下所示:headaddPointhead

void addPoint(Point **head, int x, int y, SDL_bool dir) {
    Point *p = malloc(sizeof(Point));
    p->x = x;
    p->y = y;
    p->dir = dir;
    p->next = head;
    *head = p;
}

uj5u.com熱心網友回復:

你做對了這部分:

addPoint(&down,...);

但是運算式的型別&downPoint **, not Point *,所以你需要改變 to 的addPoint定義

void addPoint(Point **head, int x, int y, SDL_bool dir) {
    ...
    p->next = *head;
    *head = p;
}

使用此代碼,您具有以下關系:

 head == &down // Point ** == Point **
*head ==  down // Point * == Point *

所以在addPoint函式中,寫到和寫到*head是一樣的down

uj5u.com熱心網友回復:

嘗試類似:

void addPoint(Point **head, int x, int y, SDL_bool dir) {
    Point* p = malloc(sizeof(p));
    p->x = x;
    p->y = y;
    p->dir = dir;
    p->next = head;
    *head = p;
}

在 C 中,本身沒有傳遞參考機制,您只需將指標傳遞給引數(在這種情況下,是指向指標的指標)。但是這些指標仍然只是值,因此對它們的更改在函式之外是不可見的。可見的是指標指向的值的變化。這就是為什么您需要將您的 p 指標分配給指標頭指向的位置,因此您需要首先使用 (*) 運算子取消參考它。

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

標籤:C 功能 指针

上一篇:從C中的字串中洗掉最常見的單詞

下一篇:返回列表

標籤雲
其他(140918) Python(36196) JavaScript(23627) Java(15876) C(14655) 區塊鏈(8222) C#(7573) AI(7469) 爪哇(7065) html(6483) MySQL(6434) 基礎類(6313) 熊猫(5921) sql(5897) PHP(5550) 数组(5500) R(5186) 腳本語言(PerlPython)(5129) Linux(5050) 非技術區(4971) 反应(4897) Android(4340) 数据框(4187) css(4083) 节点.js(3804) C語言(3288) C++語言(3117) json(3090) 列表(3012) 扑(2919) 安卓(2872) 打字稿(2834) Java相關(2746) VBA(2708) 疑難問題(2699) 單片機工控(2479) 细绳(2451) ASP.NET(2287) iOS(2285) MongoDB(2229) 麻木的(2167) 正则表达式(2154) 字典(2150) 循环(2108) 擅长(2083) 镖(2039) 迅速(2035) Web開發(1951) 功能(1898) Unity3D(1814) python-3.x(1807) 弹簧靴(1806) 谷歌表格(1800) 網絡通信(1793) xml(1783) 蟒蛇-3.x(1774) 數據庫相關(1767) .NETCore(1761) for循环(1757) VB基礎類(1755)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • C參考傳遞

    我希望這個函式在鏈表的開頭添加一個點:void addPoint(Point *head, int x, int y, SDL_bool dir) { Point *p = malloc(sizeof *p); p->x = x; p-...

    uj5u.com 2022-06-28 18:59:43 more
  • 從C中的字串中洗掉最常見的單詞

    我需要從 C 中的字串中洗掉所有出現的最常見單詞。如果文本中有多個單詞重復相同的次數,則該函式應洗掉最接近字串開頭的最常見單詞之一。省略單詞時,不應省...

    uj5u.com 2022-06-28 18:58:51 more
  • 了解指向c中指標的指標

    我有以下代碼:#include <stdio.h> int main(void) { int a[10]={10,20,30,40,50,60,70,80,90,100}; int *p; p=a; int *...

    uj5u.com 2022-06-28 18:58:02 more
  • 將訊息字串裁剪到一定長度而不破壞單詞

    有一個論壇,每個條目限制為 K 個字符。在此任務中,您的作業是實作一種演算法來裁剪過長的訊息。您會收到一條由英文字母和空格組成的訊息,可能超過限制。您的...

    uj5u.com 2022-06-28 18:57:23 more
  • int*ip=(int*)p是什么意思?[復制]

    這個問題在這里已經有了答案:...

    uj5u.com 2022-06-28 18:56:48 more
  • 為什么要在鏈表中宣告指標?

    我是 C 語言的新手。學習鏈表,我發現使用指標很難理解。(我了解鏈表與陣列相比的好處。)假設我有 3 個客戶和每個客戶的特定價值。struct linknode{ int data...

    uj5u.com 2022-06-28 18:55:03 more
  • 回圈似乎正在修改Go中的變數

    我有一個變數decodedToken(型別:結構),我通過型別斷言訪問它的一個名為“Claims”的值:claims := decodedToken.Claims.(jwt.MapClaims)然后我回圈遍歷claims(ty...

    uj5u.com 2022-06-28 18:54:04 more
  • 如何訪問存盤函式指標回傳值的結構成員的值?

    我有以下結構定義:typedef struct S_t S_t;struct S_t { float *s_ptr; uint32_t ns;};typedef struct p_t p_t;struct p_t { int32_t pID; flo...

    uj5u.com 2022-06-28 18:52:56 more
  • 用一種影像和一種div背景顏色掩蓋文本

    我的問題是我想在文本中制作一半,其中文本的另一側只是一個帶有背景顏色的 div,另一半是一個影像,這樣我就可以在文本中屏蔽它。這是示例代碼。.title {...

    uj5u.com 2022-06-28 18:51:07 more
  • Firefox將SVG顯示為黑色

    我最近將一個網站從一臺服務器移動到另一臺服務器。內容沒有改變,只有基本 URL。現在 Firefox 在新服務器上將 SVG 影像顯示為黑色。即使我直接打開影像(沒有...

    uj5u.com 2022-06-28 18:49:23 more