C程序定义一指针变量,直接令它赋值为NULL,不对它用malloc申请内存可以么?赋值和申请内存到底有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C程序定义一指针变量,直接令它赋值为NULL,不对它用malloc申请内存可以么?赋值和申请内存到底有啥区别相关的知识,希望对你有一定的参考价值。

用不用malloc,要看指针变量的具体用途。简单的说如果要给其一个单独的新值,是必须用malloc分配内存的。如果要给这个指针变量一个已经存在的值,则不需要。

简单的说赋值是拿别人的东西自己来用,而不需要管这个东西怎么来的。当然这还要考虑你的赋值操作是否合乎逻辑,合乎语法,是否有意义。

而内存分配完毕是必须进行赋值操作的,否则你的内存分配操作就无意义且是非常危险的行为。

分配内存是用于存放某些值的。犹如鸡要下蛋,需要先有一个窝。这个窝是需要你事先建好。否则鸡会四处下蛋。
参考技术A 当然可以!
如果申请后复制为NULL,则该指针为空,不指向任何内存块,
用malloc()申请内存后该指针就指向该内存的首地址。然后就可以对这块内存进行操作了
参考技术B 申请内存才可以保存赋值啊
创建变量的时候申请内存,然后可以赋值
参考技术C 只要指向的内存区域存在就没问题

c语言指针变量?

本程序将字符读入数组s中,直到用户键入ENTER键为止,然后显示读入的串。(指针变量访问字符数组)

参考技术A #include <stdio.h>
#include <malloc.h>
int main(void)

char *s, *t, *ch;
int n = 0, i;
s = t = NULL;
ch = (char *)malloc(sizeof(char));
while (scanf("%c", ch))

if (*ch == 10)
break;
n ++;
t = s;
s = (char *)malloc(sizeof(char) * n);
if (t != NULL)

for (i = 0; i < n - 1; i ++)
s[i] = t[i];
free(t);
t = NULL;

s[n - 1] = *ch;

puts(s);
free(ch);
free(s);
return 0;
参考技术B 先定义一个足够大的字符数组,定义一个指向字符的指针,并初始化指向组字符数首字节。将字符读入数组s中,直到用户键入回车符为止,然后将字符数组中的回车符改为串结束符,再用输出语句输出字符数组显示读入的串。 参考技术C

#include <stdio.h>


int main()

    char s[1000],*p;

    for(p=s;(*p=getchar())!='\\n';p++)

        putchar(*p);

    return 0;

本回答被提问者和网友采纳

以上是关于C程序定义一指针变量,直接令它赋值为NULL,不对它用malloc申请内存可以么?赋值和申请内存到底有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

C 语言数组 ( 数组指针 | 数组指针定义 | 直接定义 数组指针 )

c语言如何给指针参数赋值为null?

指针定义NULL后无法赋值?

C语言 NULL赋结构体指针变量

C语言 将整型变量赋值为空

指针变量初始化为NULL啥意思?