指针p指向数组的第三行,p[-1]表示第二行的首元素地址,p[-1][-1]表示第二行首元素的前面一个元素,即第一行最后一个元素(二维数组在内存中也是连续的)。 使用负数作为下标来访问数组,切记内存不要越界,访问的内存一定是存在的,否则会导致程序奔溃。 02数组名可以放在括号中 由于数组和指针在使用上是等价的,...
在C语言中,数组的下标必须是非负整数。如果需要使用负数作为数组的下标,可以采用以下两种方法: 使用指针和偏移量:可以使用指针来表示数组,然后通过对指针进行偏移来模拟负数下标的访问。例如,可以定义一个指针,将其指向数组的中间元素,然后通过递减偏移来访问前面的元素,以模拟能够使用负数作为下标的效果。 实现自定义的...
对于二维数组,同样可以使用负数的下标来访问元素。 int ary[3][3] = { {1, 2, 3}, {2, 3, 4}, {3, 4, 5}};int (*p)[3] = ary + 2;printf(" %dn ", 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 在 头文件 stdarg.h 中,有如下宏定义: typedef char* list; va_arg #define va_arg(li...
C语言数组下标是负数 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 int main(int argc, char *argv[]) 6 { 7 int a[10]; 8 int i, j, k; 9 int *p = NULL; 10 11 for (i=0; i<10; i++) 12 a[i] = i + 10;...
C语言中数组使用负数值的标记 ·引 对数组的认知 在c语言中,我们经常使用的一个结构便是数组,在最开始学习数组的时候,它被描述成这样(以一维二维数组为例): 一维数组是若干个数连续排列在一起的集合,我们可以通过0-N的标记(N为数组的长度)来访问每一个元素。
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语言中,a[-1] (负数下标)的用途,例子1我们都知道数组下表是从0开始的,假如我们想从1开始,可以这么干:定义一个指针,指向a[-1]这个位置#include<stdio.h>voidmain(){inta[]={1,3,4};int*p=&a[-1];inti=0;for(i=1;i<
不过有的时候,负数下标还是有点用的 这里需要明白,c++的设计思想——零成本抽象。 也就是你定义一个数组arr[]和你定义一堆变量arr_0,arr_1,arr_2...的性能是一样的。 而c++在运行的时候是完全放任,什么都不管,这就是为什么c++没有gc而诸如Java,go等语言有。 因为...
C语言中数组下标必须是从0开始的,但C语言中的指针操作给我们提供了解决负数下标问题的方法。看下面一个示例: #include "stdafx.h" #include <iostream.h> int main(int argc, char *argv[]) { int a[10]; int i, *p; for (i=0; i<10; i++) { ...