C语言代码解释,关于数组

在C中这行name[i]=(char*)malloc(4*sizeof(char));是什么意思???麻烦解答一下

一般来说name是个指针数组或者二级指针

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    char *name[2];  //声明一个指针数组,数组的每个元素都是一个指针
    name[0] = (char *)malloc(4*sizeof(char));//为name的第一个元素(即一个char *指针)分配4字节空间
    strcpy(name[0], "asd");
    name[1] = (char *)malloc(4*sizeof(char));//为name的第二个元素(即一个char *指针)分配4字节空间
    strcpy(name[1], "ddd");
    printf("%s\n%s\n", name[0], name[1]);
}

图片说明

name是一个长度为四的char数组

开辟新的地址空间,使用malloc 函数,强制类型转换为char 类型

sizeof( char ) 计算一个字符的字节数
4*sizeof( char ) 4个字符的字节数
malloc( 4*sizeof( char )) 分配4个字符的存储空间
name[ i ] = (char*)malloc(4*sizeof( char )) 分配的存储空间地址赋值给数组中 name[ i ] 元素
总的来说就是为name[ i ]分配了4个字符的存储空间,而且neme[ i ]是这个存储空间的首地址

name是指针数组,然后存储malloc函数返回的指向字符的首地址。

  1. name[i]==》*name,你可以把[]去掉。name表示你申请这块内存中数据的首地址。
  2. (char*)就是你要申请存放什么类型的数据,这里你要存放的是char类型
  3. malloc是申请内存,申请的内存放在堆中。
  4. sizeof(char)是你申请内存的大小。char占一个字节。4*sizeof(char)表示你申请4个字节。
  5. 所以name[i]=(char*)malloc(4*sizeof(char));等同于char *name=(char *)malloc(4*sizeof(char))

使用malloc 函数强制类型转换为char 类型