c语言中多维数组下标问题,C语言中多维数组下标问题?

2021-01-07 18:13:09 字数 4008 阅读 4431

1楼:匿名用户

假如:int a[30];

int b=15;

a[b]=10;//b就是下标变量,

a[3]=111; //3就是下标

//a[0],a[1],a[2]不能当作下标变量使用,他们是数组名,不是一个单纯的下标变量!“

就是说不能

a[a[4]]=100这样用

大概是这个意思 我没试过。。。。

2楼:算o你o狠

下标只是表示它存储在数组的第几位,数组里的数据地址是有按顺序的,普通变量是随机分配的

我建议你改看《郝斌c语言自学教程》

c语言中二维数组下标问题

3楼:嘟

a可以理解为二重指针,a[0]理解指针,a[0][0]是对这个地址进行访问了

。其实回[ ]的意义 可以理解成* 。

a[ i ]其实就相当于*(a+i) 所以原答来的就相当于 *(*(a+i)+j) +的优先级比 *的高 所以外面那个括号可以去掉 就变成了 **(a+i)+j 。

明白了吗?

4楼:朱猪丹

这里a指的是整个数组,而a[0]指二维数组第一行的元素,a[0][0]指数组中的第一个元素。

5楼:匿名用户

a为二重指针,a[0]是指针,a[0][0]是元素,

6楼:匿名用户

楼上回答的不错,顶一个。

c语言二维数组下标的值怎么算

7楼:v侧耳倾听

数组的下标是从0开始,由于数组是连续存储的,你可以想象用一个4x4的**来表达这个数组,然后把for循环体内语句中数组对应的下标值根据算术表达式进行计算就可以啦。

for(i=0;i<4;i++)s+=a[i][1];//等同于s=s+a[i][1];

由这个循环语句可知,将数组a[0][1],a[1][1],a[2][1],a[3][1]的值相加求和。即:

2+6+9+2 =19,其他的数组下标都可用这种方法来计算。

8楼:匿名用户

你打印出来,就清楚了啊

书上面都有吧

c语言两维数组下标用计算式有什么影响

9楼:我不是公主

可以通过下标来获取值,但是c语言不执行数组边界的有效性检查,发现如果数组下标越界了,那么它会自动接着那块内存往后写。 最早的c编译器并不检查下标,而最新的编译器依然不对它进行检查。这项任务之所以很困难,是因为下标引用可以作为任意

为什么在c语言中二维数组第二维下标可以越界?

10楼:匿名用户

因为数组是连续存储的,所以a[0][3]就是第四个存储的数据,你可以试试a[0][4]..

11楼:匿名用户

越界复是肯定的,但是越界不代表程

制序会出

bai错,你这个地方越界du后访问的正好是下一个元素4,是zhi一个dao有效值,所以不会出错。可以试试访问a[3][3],这个时候不一定会访问到什么东西,这时就很容易出现内存破坏,会提示内存不可访问之类的吧

12楼:匿名用户

不是能越界,c中数组时从0开始算起的。你是a[3][3],想要显示对应元素时,就应做相应变换,例版如显示权

第2行第3列元素(即6),就要写printf("%d ",a[1][2]);,你写a[0][3]按照3维数组来说,没有这个元素,这时c语言内的编译器就自动把这个三维数组默认成一个一维数组,他显示的是这个以为数组的第4个数,即4

13楼:幻梦の初

相当于一维数组的第四个元素

哥们,往大了试,a[0][9]你试试

14楼:大心星

假设这个数组是连续内存的话,第二个下标越界第一个不越界,那这个内地址还是有可能落在这个二维数容组的内存范围内的,但是你第一维最后元素的第二维下标越界试试? 那就跑出这个数组的内存范围了,谁这么明确告诉你可以越界了?

int a[5][5];

a[5][6]=0;

这么写或许编译不报错,但是你修改了莫名其妙地址上的数据,要么崩溃要么出错...这样是不可取的

c语言二维数组下标负数是什么意思~? 5

15楼:一口没水的枯井

1 在c语言中,二维数组的下标可以为负数,表示指向前面的元素

2 对于二维数组 int arr[m][n]来说,arr[i][j]的地址是 (*arr)+i*n+j,其值是*((*arr)+i*n+j)

3 分析本题

数组a在初始化时后,其元素按照在内存中的排列顺序依次为1,2,3,0, 4,5,6,0, 0,0,0,0

数组a的第一个元素的地址为*a(或&a[0][0]或a[0]),记为p,

则,a[2][-2]的地址就是 p+2*4+(-2) 即p+6,即指向第7个元素,其值为6;

同理,a[1][3]的地址为p+1*4+3,即p+7,即指向第8个元素,其值为0

所以i的值为6

16楼:窗前过马

在这里这不是一个错误,但是一般不会写这样的程序。

首先应该理解语言中数组的存储结构。对二维数组,在内存中实际是按行存储的,也就是说二维数组中元素是按行依次存储在一片连续的的空间中。

取某个元素时,是先通过计算这个元素的地址,再通过计算得来的地址取得该元素的。依然以二维数组为例,设数组a[rows][cols](即有rows行,cols列),当访问a[i][j]的时候,是先通过i,j的值计算得到要取的元素的地址,再在这个地址上取得该值的。计算地址的方法是:

a + i*cols + j, 这里a就是数组名,它实际存放着上是这个数组的每一个元素的地址。

因此,对于您的问题, 可能计算得到a[2][-2]的元素地址为 a+2*4 + (-2) = a + 6 = a + 1*4 + 2

它的地址与元素a[1][2]的地址一样,也就是说a[2][-2]与a[1][2]实际上是同一个元素。因此输出6,这是正常的现象。

17楼:匿名用户

着因该是 错误的``````

数组的下标是从0开始的`````

不可能有 -2;

有什么不懂 你可以给我短信```

18楼:匿名用户

我想那是一个错误,这是明显的数组越界~ 学这么长时间c语言,我从来就没有见过~

19楼:5舍

确实很奇怪,应该是错的.

20楼:匿名用户

应该是写错了吧。没见过这样的

c语言问题,二维数组的下标越界怎么看?

21楼:邰怀蕾范掣

假设bai这个数组是连du续内存的话,第二个zhi下标越界第一个不越界dao,专那这个地址还是属有可能落在这个二维数组的内存范围内的,但是你第一维最后元素的第二维下标越界试试?

那就跑出这个数组的内存范围了,谁这么明确告诉你可以越界了?

inta[5][5];

a[5][6]=0;

这么写或许编译不报错,但是你修改了莫名其妙地址上的数据,要么崩溃要么出错...这样是不可取的

22楼:匿名用户

定义的时候,数字表示的是数量。

而下标是从0开始的,所以最大下标是总数量减1。

比如int a[10]表示10个数的数组,它们的下标就是0到9总共10个。

关于c语言中二维数组的地址问题?

23楼:阳光的雷咩咩

c语言多维数组左边下标变化慢,右边快。内存存储越靠右的下标越相邻。

24楼:默默灬无言

01,00的下一个就是01是先行后列排序的

c语言中三维数组的赋值问题,C语言中三维数组的赋值问题

1楼 匿名用户 int limit 4 5 2 你这样定义是 int limit 20 2 。int limit 4 5 2 应该是 int limit 4 5 2 c语言 三维数组赋值给二维数组,为什么可以这样?里面的数值不会改变了吗? 2楼 你的数组a其实仍然是二维数组,因为你给的值显然是一个二...

c语言二维数组下标的值怎么算,c语言二维数组下标的值怎么算 5

1楼 v侧耳倾听 数组的下标是从0开始,由于数组是连续存储的,你可以想象用一个4x4的 来表达这个数组,然后把for循环体内语句中数组对应的下标值根据算术表达式进行计算就可以啦。 for i 0 i 4 i s a i 1 等同于 s s a i 1 由这个循环语句可知,将数组a 0 1 a 1 1...

C语言数组问题,C语言新手 数组问题

1楼 千锋教育 你的 问题有以下几个 1 min和max没有初始化 2 对于a min 和a max 没有做循环参考 如下 include main printf 最大数是 d,下标是 d,最小数是 d,下标是 d n a max max a min min 2楼 天雨下凡 include void...