[C指针]指针与结构体:什么是 “结构体 * 指针 = ( 结

2019-04-16  本文已影响0人  AkuRinbu
结构体 * 指针 = ( 结构体 *) malloc( sizeof(结构体) ) 内存示意图

请给我在内存找个地儿
放得下一个地址就行了
其实我不管前面的是 INT4 还是 HELLO4
只要这个【类型】是你编译器可以读出来的就行
具体这个【类型】有多大都好、有再大都好
反正现在就给点空间能放得下一个地址就行

为4个一组的int变量,申请动态分配四次
malloc(sizeof(int))
malloc(sizeof(int))
malloc(sizeof(int))
malloc(sizeof(int))

当然可以也可以是 malloc(sizeof(int) * 4)

那么为什么不能直接写
p1 = (int *) malloc(sizeof(int) * 4) 呢?

【在这里】当然可以这么写了,因为毕竟,
结构体INT4的第一个变量就是 int a,
恰好就是一个整型变量,并且恰好4个变量都是 int 变量;
这是我故意凑出来的例子。

【但是请想想看INT3_CHAR1】
对于一般的结构体而言,真实的情况是,
大部分的变量类型都不会完全一样的,
不会总是4个int一组,或者4个char一组,
如果真是这样,为什么不直接用数组呢,
结构体本来就适合各种各样类型的组合在一起。

结构体 * 指针 = ( 结构体 *) malloc( sizeof(结构体) ) ;
p1= (INT4 *) malloc (sizeof(INT4));
p2 = (INT3_CHAR1 *) malloc (sizeof(INT3_CHAR1));

完整源码

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

typedef struct int4 {
    int a;
    int b;
    int c;
    int d;
} INT4;

typedef struct int3_char1 {
    int a;
    int b;
    char c;
    int d;
} INT3_CHAR1;

int main()
{
    INT4 * p1;
    p1= (INT4 *) malloc (sizeof(INT4));
    printf("sizeof(INT4): %d\n", sizeof(INT4));
    printf("&p1:%p\np1:%p\n", &p1, p1);
    printf("INT4\na:%p\nb:%p\nc:%p\nd:%p\n"
        ,&(p1->a),&(p1->b),&(p1->c),&(p1->d));
    
    INT3_CHAR1 * p2;
    p2 = (INT3_CHAR1 *) malloc (sizeof(INT3_CHAR1));
    printf("sizeof(INT3_CHAR1): %d\n", sizeof(INT3_CHAR1));
    printf("&p2:%p\np2:%p\n", &p2, p2);
    printf("INT3_CHAR1\na:%p\nb:%p\nc:%p\nd:%p\n"
        ,&(p2->a),&(p2->b),&(p2->c),&(p2->d));
    
    return 0;   
}
上一篇 下一篇

猜你喜欢

热点阅读