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

问题描述

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

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

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

解决方案

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

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

解决方案二:

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

解决方案三:

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

解决方案四:

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

解决方案五:

我是初学,想写一个类型转换的函数,没成功
#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);
}
各位大神看看哪里错了,

解决方案六:

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

时间: 2024-09-13 05:53:18

c语言-初学C语言中数组下标的问题的相关文章

opengl-GLSL语言编写着色器时数组下标的问题

问题描述 GLSL语言编写着色器时数组下标的问题 在GLSL中,opengl红宝书第八版写的数组是列主序的,也就是第一个下标是列,第二个下标是行,但看到后边就感觉有点晕了,列主序是说存储时按列主序还是声明变量和访问数组元素是按列主序,比如,int a[4][3]在GLSL中是3行4列的数组还是4行3列的数组,之所以会有这样的疑惑,是因为看书是遇到这么几句话 mat2 m,u,v m=u*v //m={u00*v00+u01*v10 u00*v01+u01*v11 // u10*v00+u11*v

c语言-初学C语言,一个小问题

问题描述 初学C语言,一个小问题 #include #include void fun(float *p1,float *p2,float *s) {s=(float *)calloc(1,sizeof(float)); *s=*p1+*p2++; } void main() {float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=b; fun(a,b,s);printf("%5.2fn",*s); } 为什么程序的结果是10.00呢? 解决方案 因为fun

C#中数组下标为-1代表什么意思

问题描述 比如A[-1,-1] 解决方案 解决方案二:这样会产生异常,报indexoutofrange异常解决方案三:一般情况,代表一个IndexOutOfRangeException...但是如果这个是类似(int[,])Array.CreateInstance(typeof(int),new[]{5,5},new[]{-1,-1});这样创建的,那么负数下标就是合法的.或者说,CLI定义里是支持负下标数组的,但是c#本身的数组定义语法不支持.而且.net基础类库也不支持操作负下标数组,所以最

Matlab中数组下标是logical,如何处理?

K>> a = 10*ones(1,10); K>> b = [1 56 23 5 6 45 9 7 89 10]; K>> c = b<a c = 1 0 0 1 1 0 1 1 0 0 K>> a(c) = b(c) a = 1 10 10 5 6 10 9 7 10 10 从试验可以看出,逻辑1的话得到原来的值b,否则得到a中值.

《R语言初学指南》一1.4 实际案例

1.4 实际案例 R语言初学指南 前文中选取的例子仅仅是用来做简单说明,在实际生活中,对存单投资的重要性很难超越现金的重要性.在本书的一些章节中,会分析更加复杂的实际案例,这需要一步步地用R中的计算及绘图工具进行综合分析. 下面介绍生态学的数据绘图.这是一个科学上的实际案例,而不是演示案例,因此先介绍一些背景知识. 生态学是生物学的一个分支学科,是研究生物体与其周围环境相互关系的科学.几十年来,生态学家一直在关注捕食者与猎物的关系,这种关系是对社会有重要意义的问题.例如,在美国的部分地区,有关狼

再谈C语言中数组和指针之间的互操作

我曾说过,在C语言中只有一维的数组(这是我对数组的看法),而且数组元素可以是任何类型的数据(或对象),自然也可以是另外的一个数组(因为数组也是一种数据类型).所以如果你坚持要说有多维数组,那也不是不可能的事情.我们只要把一个数组赋值给另一个数组的元素就可以了.当然了,我们必须保证在程序编译期数组的大小是一个固定的常数. 其实,数组的操作很简单的.只要我们确定一个数组的大小和指向该数组下标为0的元素的指针,其他的任何一个数组下标的运算都等同于一个对应的指针运算,所以我们说"数组和指针是可以相互操作

浅议C语言中数组和指针的互操作

曾听好多朋友说,C是一种怀旧的语言,因为它的历史很久远,然而自从各种面向对象的编程语言的相续出现让它的影响力日减. 当然了,这是无可非议的,但是C的高效性是其他语言无妨比拟的,所以我们有必要把握其中的精华与奥妙,也就有必要知道其中的基本的数据结构的比如数组,稍微有点深度的堆栈.列表.结构体等的操作和实现.指针也是C语言中的一个很优秀灵活的结构,对它的了解也是必不可少的. 我们一般都认为数组是一维的数据存储结构,因为二位数组或者说矩阵都可以看作是多个一维数组的组合结构,定义在其上的数据存储访问方式

《C语言程序设计进阶教程》一3.2.2 错误数组下标

3.2.2 错误数组下标 本文讲的是C语言程序设计进阶教程一3.2.2 错误数组下标,对于一个有n个元素的数组,有效的下标是0,1,2, -, n-1,而n是一个无效的下标.当一个程序有着错误的下标时,这个程序就可能在一些情况下工作,而在其他的情况下崩溃.你不会想去编写一个靠运气工作的程序. 3.2.3 错误数据类型 你能骑自行车.你也可以用钢笔写字.你却不能骑钢笔,也不能用自行车写字.在程序中,类型指定功能.你需要理解并正确地使用类型.编程语言的趋势是让数据类型更有限制性,防止程序员犯意外的错

C语言中数组的一些基本知识小结_C 语言

初始化数组 int ages[3] = {4, 6, 9}; int nums[10] = {1,2}; // 其余的自动初始化为0 int nums[] = {1,2,3,5,6}; // 根据大括号中的元素个数确定数组元素的个数 int nums[5] = {[4] = 3,[1] = 2}; // 指定元素个数,同时给指定元素进行初始化 int nums[3]; nums[0] = 1; nums[1] = 2; nums[2] = 3; // 先定义,后初始化 定义但是未初始化,数组中有