{inta[] = {1,3,4};int*p = &a[-1];inti =0;for( i =1; i <4; i++) { printf("%d\n", p[i]); } } 因为数组并不检查下表是否越界,下表仅表示偏移, -1就表示第一个元素前面那个元素 例子2 在 头文件 stdarg.h 中,有如下宏定义: typedef char* list; va_arg #define va_arg(li...
intarray[3][3]={{1,2,3},{2,3,4},{3,4,5}}; int(*p)[3]=array+2; printf("%d ",p[-1][-1]); 指针p指向数组的第三行,p[-1]表示第二行的首元素地址,p[-1][-1]表示第二行首元素的前面一个元素,即第一行最后一个元素(二维数组在内存中也是连续的)。 使用负数作为下标来访问数组,...
{inta[] = {1,3,4};int*p = &a[-1];inti =0;for( i =1; i <4; i++) { printf("%d\n", p[i]); } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 因为数组并不检查下表是否越界,下表仅表示偏移, -1就表示第一个元素前面那个元素 例子2 在 头文件 stdarg.h 中,有如下宏定义...
1.检查数组下标是否越界。在使用数组时,应该先判断下标是否越界。可以使用if语句或其他判断语句来实现。例如: int a[10]; int i; if(i >= 0 && i < 10){ a[i] = 10; } 2.使用指针变量代替数组下标。指针变量本就可以指向数组中的某个元素,所以可以使用指针变量来代替下标。例如: int a[10]; int ...
int a[] = {1,3,4};int *p = &a[-1];int i =0;for( i = 1; i <4; i++){ printf("%d\n", p[i]);} } 因为数组并不检查下表是否越界,下表仅表⽰偏移, -1就表⽰第⼀个元素前⾯那个元素 例⼦2 在头⽂件 stdarg.h 中,有如下宏定义:typedef char* list;va_arg #...
不过有的时候,负数下标还是有点用的 这里需要明白,c++的设计思想——零成本抽象。 也就是你定义一个数组arr[]和你定义一堆变量arr_0,arr_1,arr_2...的性能是一样的。 而c++在运行的时候是完全放任,什么都不管,这就是为什么c++没有gc而诸如Java,go等语言有。 因为...
C语言计算中得出-1.#indoo的原因是溢出类问题 C语言计算中得出-1.#indoo的原因一般有两类 第一类:数组下标溢出问题,例如数组出现负数的下标 第二类:数据类型上面的溢出,你如果求幂或者费伯拉西数列的时候,项数大很容易引发溢出,float类型数据溢出就报-1.#indoo这个错误.include <stdio.h> main() {...
数组下标的主要作用是方便地访问和操作数组中的元素。通过指定下标,可以轻松地读取或修改数组中的特定元素。比如,要访问数组arr的第一个元素,我们需要使用下标0,即arr[0]。同样地,若要修改这个元素的值,也可以直接通过arr[0]进行操作。在实际编程中,正确使用数组下标至关重要。错误的下标会导致数组...
数组下标 C语言规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1,下标就相当于数组元素的编号,如下: intarr[10]={1,2,3,4,5,6,7,8,9,10};arr[0]对应的就是1arr[1]对应的就是2...arr[9]对应的就是10 可能这里...
这个-1操作,是返回当前指针前一个值。如果你熟悉c++中内存模型就应该明白。array 在内存栈或者堆中是连续的一段空间。 如果我们对一个数组 int a[10]进行a[-1]操作,那么就可能出现错误,因为我们这时候出现了不可控的指针操作,返回的值是不可预料的。