C语言修改数组元素(指针)并实现动态数组

本文探讨了如何在C语言中使用动态数组和指针修复问题1672,介绍了内存分配的malloc函数,并提供了三种代码实现,包括静态数组、动态数组和直接修改数组。适合学习者理解C语言动态内存管理和数组操作技巧。
摘要由CSDN通过智能技术生成

东北大学在线编程社区problem1672
题目描述:
输入元素个数及数组中的各元素,利用指针将其中所有负数都变为0,输出数组。

//含有错误的代码
#include <stdio.h>
int main(void)
{
    int n,i,*p;
  scanf("%d",n);
  int a[n];
  p=a;
  for(i=0;i<n;i++){
    scanf("%d", *p);
    if(*p<0)
      *p=0; 
       printf("%d ", *p);
  }
  return 0;
}

输入样例:
6
4 3 0 -1 -2 5
输出样例:
4 3 0 0 0 5
经查阅,在C语言中,静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。
在本题中,我们就需要使用动态数组,而在某些编译器中,像题目中那样简单的int a[n];并不奏效,那么我们就需要使用数组指针malloc()函数来设置数组大小,从而创建动态数组。

//该代码使用Microsoft Visual Stdio2019编写
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int n, i, * a;
	scanf("%d", &n);
    int *p = (int*)malloc(n * sizeof(int));
	a = (int*)malloc(n * sizeof(int));
    for (i = 0; i < n; i++){
        scanf("%d", &a[i]);
        p[i] = a[i];
        if (p[i] < 0)
            p[i] = 0;
        printf("%d ", p[i]);
    }	
    return 0;
}

在这里插入图片描述
当然,我们也有更简单的写法

//该代码使用Code::Blocks编写
#include <stdio.h>

int main(void)
{
	int n, i;
	scanf("%d", &n);
	int a[n];
	for (i = 0; i < n; i++){
		scanf("%d", &a[i]);
		if (a[i] < 0)
			a[i] = 0;
	}
	for (i = 0; i < n; i++)
		printf("%d ", a[i]);
	return 0;
}

上述两种写法都能顺利运行。
都看到这里了,给个赞呗!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Patrick_Zhu_NEUer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值