![C语言创建动态数组,计算前缀和数组。 b是数组a的前缀和的数组定义:b[i]=a[0]+a[1],第1张 C语言创建动态数组,计算前缀和数组。 b是数组a的前缀和的数组定义:b[i]=a[0]+a[1],第1张](/aiimages/C%E8%AF%AD%E8%A8%80%E5%88%9B%E5%BB%BA%E5%8A%A8%E6%80%81%E6%95%B0%E7%BB%84%EF%BC%8C%E8%AE%A1%E7%AE%97%E5%89%8D%E7%BC%80%E5%92%8C%E6%95%B0%E7%BB%84%E3%80%82+b%E6%98%AF%E6%95%B0%E7%BB%84a%E7%9A%84%E5%89%8D%E7%BC%80%E5%92%8C%E7%9A%84%E6%95%B0%E7%BB%84%E5%AE%9A%E4%B9%89%EF%BC%9Ab%5Bi%5D%3Da%5B0%5D%2Ba%5B1%5D.png)
#include <stdlib.h>/* 动态分配内存的库函数 malloc( )、以及后面用到的 free( ) 释放内存库函数在此头文件中有函数原型定义,故必须包含该头文件 */
#include <stdio.h>
void main( )
{
int num, * p
printf("Please input a number :\n" )
scanf("%d", &num)
p = (int *)malloc(num) * sizeof(int) /* 根据前面从键盘上输入的数字 num,动态分配一个整型动态数组 p */
......
......
free( p ) /* 应用程序结束前务必释放内存 */
}
至于说中间的程序结构的架构,就需要靠自己上机编写、并亲自调试程序了。因为任何一个程序的最终正确运行结果(可以说是100%的程序),都是必须在编程环境下面调试出来的,而不是在纸上写出来就能够保证通过的。
在纸上写出来的部分源代码,只能够是给你提供一个大致的编程思路供参考。
第一种方案,动态分配加重分配优势:一次循环
劣势:频繁申请内存
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0, j = 1
char *A = "Hello world!"
char *B = (char *)malloc(j)
while (*(A + i) != '\0')
{
*(B + i) = *(A + i)
i++
j++
B = (char *)realloc(B, j)
}
puts(B)
free(B)
return 0
}
第二种方案,先求长度再动态分配
优势:只申请一次内存
劣势:两次循环
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0
char *A = "Hello world!", *B = NULL
while (*(A + i) != '\0') i++
B = (char *)malloc(i + 1)
while (i >= 0)
{
*(B + i) = *(A + i)
i--
}
puts(B)
free(B)
return 0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)