// A C program to demonstrate linked list based implementation of queue
#include <stdio.h>
#include <stdlib.h>
struct QNode {
int key;
struct QNode* next;
};
struct Queue {
struct QNode *front, *rear;
};
struct QNode* newNode(int k)
{
struct QNode* temp = (struct QNode*)malloc(sizeof(struct QNode));
temp->key = k;
temp->next = NULL;
return temp;
}
struct Queue* createQueue()
{
struct Queue* q = (struct Queue*)malloc(sizeof(struct Queue));
q->front = q->rear = NULL;
return q;
}
void enQueue(struct Queue* q, int k)
{
struct QNode* temp = newNode(k);
if (q->rear == NULL) {
q->front = q->rear = temp;
return;
}
q->rear->next = temp;
q->rear = temp;
}
void deQueue(struct Queue* q)
{
if (q->front == NULL)
return;
struct QNode* temp = q->front;
q->front = q->front->next;
if (q->front == NULL)
q->rear = NULL;
free(temp);
}
int main()
{
struct Queue* q = createQueue();
enQueue(q, 10);
enQueue(q, 20);
deQueue(q);
deQueue(q);
enQueue(q, 30);
enQueue(q, 40);
enQueue(q, 50);
deQueue(q);
printf("Queue Front : %d \n", q->front->key);
printf("Queue Rear : %d", q->rear->key);
return 0;
}
以上代碼來自 geeksforgeeks 網站。在函式呼叫中,他們使用指向結構的指標,在函式定義中,他們將指標傳遞給結構。它是如何作業的,我認為我們需要使用雙指標,否則 > 它是按值傳遞而不是按參考傳遞。上面的代碼作業正常,但我對此表示懷疑。
uj5u.com熱心網友回復:
在main有一個變數q宣告它是一個指向一個結構。該變數q用作函式引數,這意味著函式接收指向結構的指標。該函式可以取消參考指標并修改結構。該變數q在技??術上是按值傳遞的,因為它的值是一個指標,而這正是函式接收的。但是你必須記住,q指向一個可以被函式修改的結構體。
因為這種情況會引起一些混亂,所以有些人試圖引入新術語,如“通過共享”或“物件共享”,以區別于通過值傳遞原始值(如“int”)。
如果您傳遞了一個指向指標的指標,那么該函式可能已經修改了q宣告的變數main并將其更改為指向一個完全不同的結構。這將是(技術上)通過參考傳遞,因為您正在傳遞對變數的參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/370437.html
上一篇:本地與全域宣告
