首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于数组上标为负的有关问题,很迷惑

2012-08-10 
关于数组下标为负的问题,很迷惑C/C++ codechar s[32]for(i28i0i--){s[i-28]encodei&0x01}for(n

关于数组下标为负的问题,很迷惑

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;} 

热点排行