2 iseuwei ISEUWEI 于 2016.03.06 07:31 提问

初学C语言中数组下标的问题

void strtol(char s[]){
int i=0;
while(s[i++]);
while(i>=0)
s[i--]=s[i];

发现没有报错,怎么解释呢
显然会出现s[0]=s[-1]不是吗

6个回答

caozhy
caozhy   Ds   Rxr 2016.03.06 07:42
已采纳

s[i--]=s[i];
这个执行的是s[i]=s[i];
i--;

再说了,就算数组访问下溢,也不会报错。

zuishikonghuan
zuishikonghuan   2016.03.06 07:45

s[-1]相当于*(s-1),也就是说数组的第一项之前的一字节内存。越界了。编译器没有你想象的那么智能,所以没报错

fish9670
fish9670   2016.03.06 08:17

你先要弄清变量的自加减,而且C语言在数组下标越界时不会报错。建议把自加减换成i-1

fish9670
fish9670   2016.03.06 08:19

i=0时有个下标等于-1,i应该大于0

ISEUWEI
ISEUWEI   2016.03.06 18:11

我是初学,想写一个类型转换的函数,没成功图片说明
#include
char inttoch_I(int i){
char ch=(char)(i+'0');
return ch;
}
void strtor_I(char *s){
int i=0;
while(s[i++]);
while(i>0) s[i--]=s[i];
}
char *inttostr_I(int i){
char str[16];
for(;i;i/=10){
strtor_I(str);
str[0]=inttoch_I(i%10);
}puts(str);
return str;
}
void main(){
inttostr_I(3241);
}
各位大神看看哪里错了,图片说明

u012979318
u012979318   2016.03.07 04:49

i --是在i被使用后再自减

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
浅议C语言中数组和指针的互操作
浅议C语言中数组和指针的互操作浅议C语言中数组和指针的互操作浅议C语言中数组和指针的互操作浅议C语言中数组和指针的互操作
C语言中数组与指针的使用技巧
C语言中数组与C语言中数组与指针的使用技巧指针的使用技巧C语言中数组与指针的使用技巧
C语言中数组的初始化问题
C语言中数组的初始化问题 标签: 语言c编译器 2012-07-21 18:02 1860人阅读 评论(0) 收藏 举报  分类: Android闲谈(62)  版权声明:本文为博主原创文章,未经博主允许不得转载。 C语言中数组的初始化问题 一维数组 Int a[] = {1,2,3,4} //用数去填充 Int a[3] = {1,2
C语言数组元素下标为何从0开始
很多同学可能在学习数组时会有这个疑问,下标为什么不从1开始呢?从1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个。的确,有些计算机语言如早期的Pascal语言,数组元素的下标是从1开始的。难道是C语言故意要与众不同?要弄清楚这个问题,得先看一下计算机底层是怎样处理数组元素的。我们先编写了一个小程序,然后在visual studio中对其进行了反汇编。源程序和反汇编后的部分
C语言中数组下标为“-1”的情况(array[-1])
今天看代码的时候无意中看到了一个检测数组越界的代码段:
C语言数组PPT
简单详尽的C语言数组学习,让你更快解决C语言中数组问题。
C语言·数组知识小结
为了您的阅读体验,请移步至专栏文章C语言·数组知识小结(排版原因,尤其是使用手机阅读的人)       在C语言中我们经常用到数组,这其中有很多我们需要了解并且注意的地方。以下是我学习数组之后的一个简单总结。这里我们详细说明一维数组和二维数组的相关知识。一维数组一维数组的创建数组是一组相同类型元素的集合。数组的创建方式:type_t arr_name [const_n];(type_t 是指数组的...
C语言数组下标是负数
编程时我们经常会遇到处理边界问题的情况,这时数组的下标可能是从负数开始的。通常的方法是将边界分离出来单独处理,但这样比较麻烦,程序读起来也比较费力。那么能不能直观的用负数作为下标呢?     C语言中数组下标必须是从0开始的,但C语言中的指针操作给我们提供了解决负数下标问题的方法。看下面一个示例: #include "stdafx.h" #include int main(int arg
C语言程序数组下标超限却可以正常运行的情况
共阴LED数码管,0,1,2,3,4,5,6,7依次从右向左移动,直至留在最左侧。显示满屏后清空。例程如下: /*----------------------------------------------- 名称:多位数码管动态扫描显示变化数据 修改:无 内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值 ------------------------
数组的使用
主要介绍c语言中的数组知识