c++ - C 语言指针的运算问题
巴扎黑
巴扎黑 2017-04-17 14:49:32
0
2
567

代码的目的是让结构体里面的 List 指针指向申请的一维数组;curNumber表示目前数组里的元素个数;代码编译通过了,但是不能运行出来;求详解!

#include<stdio.h>
#include<stdlib.h>
typedef struct Stack{
    int * List;
    int curNumber;
}Stack, *link;


int main(){
    void initst(link *A);
    void pus(link *A,int k);
    
    link *A;
    int k = 8;
    initst(A);
    pus(A, k);
    return 0;
}

void initst(link *A){
    *A = (link)malloc(sizeof(Stack));
    (*A) -> List = (int *)malloc(4 * sizeof(int));
}
void pus(link *A,int k){
    *((*A)-> List) = k;
    printf("%d \n",*((*A) -> List));

}
巴扎黑
巴扎黑

全員に返信(2)
Ty80
リンク *A;
int k = 8;
initst(&A);
...

void initst(リンク **A){
    *A = (リンク)malloc(sizeof(Stack));
    (*A) -> リスト = (int *)malloc(4 * sizeof(int));
}

関数内の第 1 レベルのポインタ パラメータのポインティングを変更する場合は、第 2 レベルのポインタを使用する必要があります。

いいねを押す +0
大家讲道理

A はセカンダリ ポインタです。正確にはスタック **A ですよね?
initst で *A を変更しましたが、A を初期化しませんでした。A はランダムなアドレスを指します。
この方法で型を定義する方が良いでしょう。
... }Stack, *PStack;
...
PStack pA; // pA もポインタであることに注意してください。
PStack *ppA = &pA;
initst(ppA);
ロジックは、initst を呼び出した後、pA に格納されているアドレスを変更します。
もちろん
PStack pA;
initst(&pA);
の方が直接的です。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート