结构内的结构

0 c memory

有人可以用以下代码帮我吗?该程序运行正常.

这些是我的问题:

  1. 为什么点运算符在c中工作?
  2. s1当我为一个结构分配足够的内存时,为什么我能够访问堆栈结构(即)两次?它是如何成为阵列的?
  3. 任何人都可以解释一下如何分配内存?

代码:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

typedef struct
{    
    struct mynode
    {
        int val;
        struct mynode *next;    
    } node;        
} stack;

int main()
{
    stack *s1;
    s1=(stack*)malloc(sizeof(stack));


    s1[0].node.val=10;
    s1[1].node.val=20;
    printf("%d",s1[1].node.val);

    getch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*dam 10

  1. 我不知道你的意思.点运算符访问结构的成员,就是它的作用.
  2. 你不能,你做的事非法.C没有机制阻止你做坏事,虽然你的程序会在你做"不够"的事情时崩溃.你在这里很幸运.它没有成为一个数组,你只是把它当成一个.编译器无法判断它是否是指向一个元素或多个(数组)的指针,因此它允许您将任何指针视为数组.你应该确保这是一件有效的事情.
  3. malloc的.

  • 在第2点扩展,您为一个对象分配了空间(或者等效地,对于长度为1的数组).试图访问该数组的*second*元素是一个错误,但不是要求实现捕获的错误.你可能正在破坏未分配的内存.扩展到第3点,`malloc()`由语言定义,以分配指定大小的内存块(或者如果不能这样做则返回空指针).该语言没有说明*如何做到这一点,99%的时间你不需要关心. (2认同)