标题:动态内存分配的问题
只看楼主
shulun743
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-10-12
结帖率:50%
 问题点数:0 回复次数:1 
动态内存分配的问题
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

 
int main()
{
   char name[100];
   char *description;

 
   strcpy(name, "mike");

 
   /* 动态分配内存 */
   description = (char *)malloc( 200 * sizeof(char) );
  
}



问题:
    1、name 只能通过 strcpy(name, "mike")赋值吗?  我尝试 name="mike";报错呢?为啥呀?

    2、(char *)malloc( 200 * sizeof(char) ) 我知道是内存处理,但就是不理解?该怎么断句呢?
         (char *)
          malloc()
          200 * sizeof(char)  
       这样断句对吗?
    3、(char *) 是指 一个char类型的指针吗?
        200 * sizeof(char) 直接写作 char 200 不行吗? 为何这样写?
搜索更多相关主题的帖子: char 内存 动态 name sizeof 
2022-10-14 14:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
1. 不是,name[0]='m', name[1]='i', name[2]='k', name[3]='e', name[4]='\0'; 也是赋值;
   “我尝试 name="mike";报错呢?为啥呀?” ------ 你把一个数组常量赋值给另一个数组常量,语法讲不通,可变的是 name中的元素,而不是 name本身。错误相当于 1=2

2. 根据 操作符 与 优先级 断句
description = (char *)malloc( 200 * sizeof(char) ); 分成 description 与 (char *)malloc( 200 * sizeof(char) );
(char *)malloc( 200 * sizeof(char) ) 分成 (char *) 与 malloc( 200 * sizeof(char) );
malloc( 200 * sizeof(char) ) 分成 malloc() 与 200 * sizeof(char)
但 description = (char *)malloc( 200 * sizeof(char) ); 属于无知做法,在C语言中应该写成 description = malloc( 200 * sizeof(char) );在C++语言中应该使用 new operator 或 operator new。
C语言为了去掉重复的冗余而规定 void* 可以转换成任意 type*,又有半吊子把它加上。相当于擦了屁股后,再把大便糊屁股上

3. 听不懂,“char 200”是什么?
但 malloc( 200 * sizeof(char) ) 可以写成 malloc( 200 ),因为C/C++规定 sizeof(char) 必然等于1。(注:C/C++中 sizeof(char)必然是 1byte,但1byte未必是8bits。)
2022-10-14 14:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510312-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.265935 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved