指针p指向数组的第三行,p[-1]表示第二行的首元素地址,p[-1][-1]表示第二行首元素的前面一个元素,即第一行最后一个元素(二维数组在内存中也是连续的)。 使用负数作为下标来访问数组,切记内存不要越界,访问的内存一定是存在的,否则会导致程序奔溃。 02数组名可以放在括号中 由于数组和指针在使用上是等价的,数组可以使用指针来表示,指针也可以通过
不可以。C语言标准规定数组下标必须是非负整数。如果需要使用类似负数下标的功能,应该通过指针运算来实现,并严格确保内存访问的安全性。 综上所述,C语言数组下标不能是负数。如果需要访问数组前后的元素,建议使用指针运算来实现,并确保不会越界访问无效内存。以下是一个通过指针运算间接实现负数下标访问的示例代码: 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]表示第二行首元素的前面一个元素,即第...
C/C++ 从数组负数下标开始 如果我们定义一个长度为n的数组,那么理论上下标的范围为[0,n−1]。 但是实际上,在C/C++中,数组的下标可以是负数,而且是可以通过编译的。 intarr[]={1,2,3,4};intnum=arr[-3]; 这里需要明确,C/C++ 是不会检查下标时候合法。 因为C要追求速度,如果他要检查下标,就需要在...
C语言数组下标是负数 1#include <iostream>2#include <cstdio>3usingnamespacestd;45intmain(intargc,char*argv[])6{7inta[10];8inti, j, k;9int*p =NULL;1011for(i=0; i<10; i++)12a[i] = i +10;1314printf("Using a...\n");15for(i=0; i<10; i++)16printf("%d", a[i]);17...
{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 中,有如下宏定义: ...
include<stdlib.h> include<stdio.h> int main(){ int i;int a[5];for(i=0;i>-5;i--)scanf("%d",&a[i]);for(i=0;i>-5;i--){printf("%d\n",a[i]);printf("%d\n",&a[i]);//输出地址;} system("pause");} 能运行,是往上寻址;呵呵,我也 很惊讶!
下表为负的数组在 C 语言里并不是不能做到。首先,创建一个正常的数组 int A[20];。然后用指针指向其中间的元素 int *A2 = &(A[10]);这样,A[-10 ... 9] 就是一个可用的有效范围了。/* 样例示范 */#include <stdio.h>int main(int argc, const char *argv[]){ int A[20]...
int* p = &a[ 4 ]; for(inti = -4; i <= 0; i++ ) { std::cout << p[ i ] << std::endl; } system("pause"); return0; } C++中下标是可以为负数的,当数组下标位负数时,就是从当前地址向前寻址。。这里的输出结果为: 0 1 2 3 4...