2 qq 34524827 qq_34524827 于 2016.04.07 16:00 提问

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

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

8个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.07 16:11
已采纳

一般来说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]);
}

图片说明

gr47725812
gr47725812   2016.04.07 16:11

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

suwu150
suwu150   2016.04.07 16:14

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

suwu150
suwu150 其中sizeof (char)的结果为1
2 年多之前 回复
yanjinxu
yanjinxu   2016.04.07 16:26

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 ]是这个存储空间的首地址

yanjinxu
yanjinxu 回复charles123a: 你可以将 name[ i ] 地址打印出来看看就知道了
2 年多之前 回复
qq_34524827
qq_34524827 这样说我理解了 那我想问下 #include<stdio.h> #include<string.h> void main() { void input(char *name[],int n); char *name[4]; int n=4; input(name,n); } void input(char *name[],int n) { int i; printf("请输入4个字符串:\n"); for(i=0;i<n;i++) { name[i]=(char*)malloc(4*sizeof(char)); gets(name[i]); } } 这里面的name[i]=(char*)malloc(4*sizeof(char));这行是对gets函数输入的字符串依序分配空间对吗?
2 年多之前 回复
qq_34575264
qq_34575264   2016.04.07 16:36

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

zhangmeng1021
zhangmeng1021   2016.04.07 16:37
  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))
CSDNXIAON
CSDNXIAON   2016.04.07 16:42

C语言代码解释
黑马程序员:c语言数组及练习代码
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

qq_26431469
qq_26431469   2016.04.08 10:24

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c语言常见笔试题总结 -- 带答案
我整个有答案的: 【1 使用宏】 1.1宏 #ifdef NDEBUG #define TRACE(S) S #else #define TRACE(S) printf(“%s;\n”, #S); S #endif 问:以上TRACE()宏的作用是什么? 当打开宏时, 可以用于 打印 S 1.2 #error的作用? 答:#error 预处理指令
c语言 有关数组的入门简单题
(1)题目是:编写C语言程序,求2个一位整型数组的积 代码如下 #include &amp;lt;stdio.h&amp;gt; int main() { int a[105],b[105],n; int c[105]; //定义数值 while(~scanf(&quot;%d&quot;,&amp;amp;n)) { for(int i=1;i&amp;lt;=n;i++)//这是第二行的输...
C语言·数组知识小结
为了您的阅读体验,请移步至专栏文章C语言·数组知识小结(排版原因,尤其是使用手机阅读的人)       在C语言中我们经常用到数组,这其中有很多我们需要了解并且注意的地方。以下是我学习数组之后的一个简单总结。这里我们详细说明一维数组和二维数组的相关知识。一维数组一维数组的创建数组是一组相同类型元素的集合。数组的创建方式:type_t arr_name [const_n];(type_t 是指数组的...
C语言实现贪吃蛇(一)----数组实现
本人是一个C语言新手,在网上看到有的人用C实现了贪吃蛇的游戏,想着为了巩固一下自己的C语言,然后就学着写了一个,当然基本上是Copy别人的代码,然后加上自己的理解。在这里做一下记录,也希望能够帮助那些跟我差不多的同学。一、贪吃蛇实现原理: 贪吃蛇游戏在理论上是可以无限的进行下去的(除了撞墙和咬到自己),那么游戏主体就一定是个循环。 蛇是如何动起来的?在这里就是通过不断改变蛇的坐标,然后根据蛇的坐标不
G代码经典解释程序
G代码经典解释程序,Linux下G代码解释器的设计与实现,C语言。
彻底弄懂C语言数组名
先定义一个一维数组int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };一、数组名是什么数组名的值是数组首元素的指针常量。 数组名不是指针,但大多数使用到数组名的地方,编译器都会把数组名隐式转换成一个指向数组首元素的指针来处理。只有两种情况下例外:第一种是对数组名使用sizeof运算符sizeof(a)这将会得到整个数组所占的内存大小,a是长度为10的int(4字节
曾经进公司面试的C语言有关指针和数组的笔试题
原题如下: #include int main(void) { int i , j ; unsigned int Array_A[32]; unsigned int *pPointer; i = 0x0008 ; //测试i printf("i=%d\n",i) ; pPointer = Array_A ; *(pPointer++)=i++ ; //测试i pr
C语言关于数组的部分总结
C语言关于数组的总结
关于C语言数组的定义问题
1. C语言的数组定义其实是一个指针的trick,事实上: a[3] == *(a+3) == *(3+a) == 3[a]这说明C语音的数组信息中,并没有数组长度的信息,只有两个地址(也就是a和(a+3))。因为两个地址中间和两个地址外面都存有信息,所以C语言没办法判断一个数组是否越界。但这并不代表我们就没有必要判断数组是否越界或者说去遵循数组定义时的大小,在编译的时候,系统会
中缀转前缀 c语言
今天写后缀表达式转中缀表达式卡了好久,最后去上网问了才会,思路很清晰但是代码的组织能力欠缺。看来我也是那种伪代码写的对,代码通不过的选手。 写个普通的中缀转前缀吧,算法都是死的,就那么几步,我还调试了半天,不过对优先级的理解倒是透彻了(isp 和 icp) 利用栈将中缀表达式转成前缀表达式的思路: 1)求输入串的逆序。 2)检查输入的下一元素。 3)假如是操作数,把它添加到输出串中。