数组---------strlen

string

strlen(a)——获取数组a的长度,注意这是有效长度哦,就是说没有将字符串结束符算进去。

所以for(i=0;i<strlen(a);i++}printf("%c",a[i]);就可以将数组a都输出啦=0多了一个但<strlen没有取=又少了一个因此得到了平衡。

  • for(int i=m;i<=strlen(t);i++)注意,这里是等于,为什么呢,因为这里是从m(非0)开始,m为一个具体的数,这里没有多0,所以有=;
  • 注意上述是从第m+1个数开始的哦,因为0也是一个数,所以当数组下标为m时实际是第m+1个元素

数组长度问题

我在思考能不能定义一个可输入的变量为数组长度,如下代码:

scanf("%d",&m)
int a[m];
报错:

[Error] variable-sized object 'a' may not be initialized——[错误] 可变大小的对象“a”可能未初始化

琢磨:

我寻思着反正m会输入,那么我把定义语句写在输入后面a数组长度不就确定了嘛,接下来我们插入以下内存分配的方式:

插入内存分配:

1.静态存储区分配

由编译器自动分配和释放,在程序编译的时候就已经分配好内存,这块内存在程序的整个运行期间都存在,直到整个程序运行结束时才被释放,如全局变量与静态变量(包括静态全局和静态局部变量)。

2.栈上分配(动态内存分配)

同样由编译器自动分配和释放,在函数执行时,函数内部的局部变量都可以在栈上创建,函数执行结束时,这些存储单元将被自动释放。

(需要注意的是,栈内存分配运算内置于处理器的指令集中,它的运行效率一般很高,但是分配的内存容量有限。)

3.从堆上分配(动态内存分配)

也称为动态分配内存,由程序员手动完成申请和释放。程序在运行的时,由程序员使用内存分配函数(如malloc函数)来申请内存,使用完之后再由程序员自己负责使用内存释放函数(如free函数)来释放内存。

(需要注意的是,如果在堆上分配了内存空间,就必须即使释放它,否则将会导致运行的程序出现内存泄漏等错误)
 

在c语言中,不同类型变量的存储位置和作用域也有所不同
————————————————

原文链接:https://blog.csdn.net/u010547141/article/details/103407991

总结

由上述解释我们就可以知道:由编译器自动分配和释放,在程序编译的时候就已经分配好内存

在编译时就已经要分好内存 ,而我们输入m是在编译运行后,因此在编译时m仍为变量,不是固定值!!!所以不可以如此哦

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值