찾다

 >  Q&A  >  본문

c++ - C 语言指针的运算问题

代码的目的是让结构体里面的 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));

}
巴扎黑巴扎黑2803일 전552

모든 응답(2)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-17 14:51:32

    link *A;
    int k = 8;
    initst(&A);
    ...
    
    void initst(link **A){
        *A = (link)malloc(sizeof(Stack));
        (*A) -> List = (int *)malloc(4 * sizeof(int));
    }

    想要在函数里面改变一级指针参数的指向,要使用二级指针

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 14:51:32

    你的A是个二级指针吧。其实是Stack **A对吧。
    你在initst对*A进行修改,可是你没有初始化A啊,A指向的是随机地址。
    类型这么定义比较好
    …… }Stack, *PStack;
    ……
    PStack pA; // 注意 pA 也是一个指针啊!
    PStack *ppA = &pA;
    initst(ppA);
    你这个逻辑调用initst后会修改pA存储的地址啊。
    当然
    PStack pA;
    initst(&pA);
    更直接。

    회신하다
    0
  • 취소회신하다