難道在C語言中一個結構不能包含指向自己的指標嗎?

2023-02-14 03:30:16 字數 3764 閱讀 4579

1樓:匿名使用者

c 語言中的結構當然可以包含指向自己的指標; [k&r2, 第 節] 的討論和例子表明了這點。 nodeptr 例子的問題是在宣告 next 域的時候 typedef 還沒有定義。

為了解決這個問題, 首先賦予這個結構一個標籤 (`struct node'')然後, 宣告 ``next'' 域為 ``struct node *'或者分開 typedef 定義和結構定義, 或者兩者都。以下是一個修改後的版本:

struct node ;

typedef struct node *nodeptr;

至少還有三種同樣正確的方法解決這個問題。

在用 typedef 定義互相引用的兩個結構時也會產生類似的問題, 可以用同樣的方法解決。

2樓:千鋒教育

c 語言中的結構當然可以包含指向自己的指標; nodeptr 例子的問題是在宣告 next 域的時候 typedef 還沒有定義。為了解決這個問題, 首先賦予這個結構一個標籤 (「struct node」)。然後,宣告 「next」 域為 「struct node *」或者分開 typedef 定義和結構定義。

以下是一個修改後的版本:

struct node ;

typedef struct node *nodeptr;

至少還有三種同樣正確的方法解決這個問題。在用 typedef 定義互相引用的兩個結構時也會產生類似的問題, 可以用同樣的方法解決。

c語言如何在結構體中定義指向自身資料結構的指標?

3樓:匿名使用者

上樓錯誤:

在定義*pa的時候,編譯器根本就不知道還有a這個型別所以應該是這樣的。

typedef struct a

a;象定義連結串列的結構的時候有這樣:

typedef struct lq

lqnode;

一個道理。

4樓:社會人二

這是連結串列,搜一下連結串列的相關知識你就會了。

如果結構中含有指標,則可以定義一個指向該結構的指標嗎,為什麼我定義了這個指標但是提示我沒有宣告

5樓:匿名使用者

你s也要分配記憶體,先用malloc給s分配記憶體。

c語言結構連結串列指標問題。為什麼我的指標不能指向陣列?

6樓:匿名使用者

字串是陣列,不能用等號賦值,需要採用strcpy()函式#include //引用字串函式標頭檔案。。。strcpy( pnew->name, name );

strcpy( pnew->address, address);

strcpy( pnew->car_num, car_num);

7樓:牛牛牛不牛

字元陣列 賦值的時候,陣列名 其實就是陣列的首地址,直接 等號賦值顯然不行,可以使用 memcpy()函式,或者單個字元迴圈 等號賦值即可。

c語言中定義連結串列必須要指向下一個元素的指標麼?

8樓:匿名使用者

沒有next的指標應該不算連結串列吧。這個是約瑟夫問題。讓連結串列的最後一個節點的next指向連結串列的第一個節點,形成迴圈連結串列。也就是說不要頭結點了。然後就很容易實現啦。

9樓:匿名使用者

沒有next指標你沒法把多個節點連線起來啊,那就不叫連結串列了// s:~連結串列實現。

#include

typedef struct list list, *node;

int main()

jc[i-1].t = jc;

prev = jc + 13 - 1;

next = jc;

i = 0;

while(prev !=next) else}printf("survivor:%d", prev->id);

return 0;}

在c語言中struct結構體裡面 不能定義函式麼?

10樓:匿名使用者

不可以的,結構體一般都只有資料成員,而沒有函式成員。也就是像int、double這樣的資料型別,函式需要單獨定義。如果必需使用函式,就得用c++中的類概念了。

11樓:匿名使用者

c中不能,c++裡可以在結構體內定義函式,用法和class定義類是一樣的,說穿了struct 和 class用法相同,但要注意的一點是,struct預設的是public型別,而class預設的是private型別的。

12樓:匿名使用者

是的。結構體只能儲存資料。在c++中,引入了類的概念,類中既可以宣告變數,也可以定義函式。

13樓:匿名使用者

不能。結構體是一種複合資料型別只能存放資料 不過你可以嘗試定義一個指向函式的指標看看。

14樓:那些忘記的什麼

linux. c可以,手機打字不方便,在結構體中定義指標函式。

c難道不是水平結構嗎

15樓:永遠的

首先b,c是兩個不同的群落,一個是水生群落,一個是陸地群落,而群落結構這個概念是建立在同一群落中的,所以不是水平結構 。這兩個群落有明顯的垂直分佈,尤其是c群落的分佈在書中是有舉例的,所以兩個群落體現垂直結構,c項正確。望採納。

c語言結構體指標成員所指向的變數如何訪問?

16樓:匿名使用者

第一種寫法:

(*a).p=&b;

.的優先順序高於*,(pointer)兩邊的括號不能少。如果去掉括號寫作*pointer.

membername,那麼就等效於*(,這樣意義就完全不對了。

第二種寫法:

a->p=&b;

->是一個新的運算子,習慣稱它為「箭頭」,有了它,可以通過結構體指標直接取得結構體成員;這也是->在c語言中的唯一用途。

結構體是一種資料型別,是一種建立變數的模板,編譯器不會為它分配記憶體空間,就像 int、float、char 這些關鍵字本身不佔用記憶體一樣;結構體變數才包含實實在在的資料,才需要記憶體來儲存。下面的寫法是錯誤的,不可能去取一個結構體名的地址,也不能將它賦值給其他變數。

17樓:匿名使用者

結構體指標成員所指向變數,這個說法理解起來有點困難。

從字面意思上回看斷句,有。

如下答幾種可能:

首先定義一個包含所有可能情況的結構體:

struct test

;struct test t1, *t2;

1 結構體/指標成員/所指向的變數。

結構體中有指標成員,然後要訪問這個結構體成員指向的變數值。

那麼可以*(這種方式對p取值。

2 結構體指標/成員/所指向變數。

這種情況有兩種方法可以訪問:

*(t2->p)

或者*(*t2).p)

效果是一樣的。

3 描述有誤,實際為:

結構體指標所指向/成員變數。

同樣有兩種方法可以使用:

t2->p

或者(*t2).p

18樓:匿名使用者

因為復int是一個值型別的,制所以不能直接賦值給p(p是int指標型別)。因此二樓加括號是對的。通過取p的地址轉化成對應的指標,然後直接把b賦值給它。

c語言中for迴圈的例題,一個c語言中for迴圈的例題

c語言中的for迴圈語句使用最為靈活,不僅可以用於迴圈次數已經確定的情況,而且可以用於迴圈次數不確定而只給出迴圈結束條件的情況,它完全可以代替while語句.for 表示式 1 表示式 2 表示式 3 語句 它的執行過程如下 1 先求 表示式1.2 求 表示式2 若其值為真 值為非0 則執行for語...

c語言中一道題不明白什麼意思C語言中一道題,不明白什麼意思

分段函式求值內容.main 分段來的自,bai也du就zhi 是dao if x 1 else if 1 x 10 else 其實,這是三複條選擇語 制句,你從右邊往左邊讀就行了,當x滿足。時,就執行對應左邊的函式表示式,把x值帶如對應的函式算就行了。你要明白,你帶入一次,只能從三個中選一個做運算,...

C語言編寫函式,如何在C語言中定義一個函式?

這個hanshu 用來從20個隨機數中推匯出15個不重複的隨機數 正數 演算法邏輯有問題。看這一句 a i a i 1 想做什麼?它在內迴圈裡 迭代數是j不是i 當前後兩數相同時它總是把後一個數賦值給前一個數,猜想你大概是想不斷的把後面的數賦給i位置的數然後做相等測試,而這裡的i就沒有動 那個con...