关于数组下标为负的问题,很迷惑
- C/C++ code
char s[32]; for(i=28;i>=0;i--) { s[i-28]=encode>>i&0x01; } for(n=0;n<29;n++) { if(s[n]==0x01) { GPIO_SetBits(GPIOB, GPIO_Pin_0); Delay(5); GPIO_ResetBits(GPIOB, GPIO_Pin_0); Delay(5); } else if(s[n]==0x00) { GPIO_ResetBits(GPIOB, GPIO_Pin_0); Delay(10); } }这段代码是一本实验指导书上的,是arm单片机上的一段代码,用c写的,应该没有错的。问题是在第一个for循环里数组的下标是从0到-28的负值,想请问的是这个数组里存的是什么,是赋值语句encode>>i&0x01的值吗?第二个for循环明显是应该从第一for循环里取出s[n]的值进行比较判断,但是第二个for循环里的数组下标是从0到29的,感觉应该是取不到想要的吧。这里就看不懂了,麻烦懂得帮帮忙
[解决办法]
可以这样理解
定义一个数组 int A[10];
定义一个指针 int *p = A;
那么A[1] = *(P+1) ,因为数组的名字就是地址,所以A[1] = *(A+1)
当 p=&A[2]的时候,p[-1] = A[1]
举个例子:
- C/C++ code
#include <iostream>using namespace std;int main(){ int a[5] ={1,2,3,4,5}; int *p = &a[3]; cout<<a[1]<<endl; cout<<p[-1]<<endl; return 0;}