A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 四季列车 中级黑马   /  2014-3-19 23:08  /  1444 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include <STDIO.H>
#include <IOSTREAM>
#define  TRUE 1;
#define FALSE 0;
#define  OK 1;
#define ERROR 0;
#define INFEASIBLE -1;
#define  OVERFLOW -2;
#define LIST_INIT_SIZE 100
#define LISTCREMENT 10
typedef int ElemType;
typedef int Status;
typedef struct{
        ElemType *elem;
        int length;
        int listsize;
}SqList;

Status InitList_Sq(SqList &L){
        L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
        //if(!L.elem) exit(OVERFLOW);
     L.length=0;
         L.listsize=LIST_INIT_SIZE;
        return OK;
}
Status ListInsert_Sq(SqList &L,int i,ElemType e){
        ElemType* newbase;
        ElemType* p;
        ElemType* q;
        if(i<1||i>L.length+1)return ERROR;
        if(L.length>L.listsize){
                newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTCREMENT)*sizeof(ElemType));
                L.elem=newbase;
                L.listsize+=LISTCREMENT;
        }
  q=&(L.elem[i-1]);
  for (p=&(L.elem[L.length-1]);p>=q; --p) *(p+1) = *p;
  *q=e;
  ++L.length;
return OK;
}

int main(){
       
        return 0;
}
上面代码里,有ElemType *elem;其中ElemType 是一个int ,为什么我看见书本上写成elemt[1],elemt[2],可是elem明明就是一个int*数据类型,不是一个数组,为什么可以用下标

3 个回复

倒序浏览
楼主是不明白int *array和int array[]的区别吧!其实他们的关系是很密切的。int* array中的array是这个数组的首地址,等价于int array[]中的array,只是前者是一个常量,后面的那个不是,如果是字符串的话,前者一旦赋值后不能更改,相当于const,后者复制后可以在字符串里面修改某个指定的元素。
  1. char *array = "hello";
  2. char array1[] = "hello";
  3. array1[2] = 'r';
  4. array[2] = 'r';      //这个是错误的
复制代码
回复 使用道具 举报 1 0
你太有才了
回复 使用道具 举报
其实数组名就是代表存储了数组第一个元素的地址。比如:int array[3] = {1, 2, 3};,array就是表示第一个元素1的地址。所以如果定义一个指针变量p,如:int *p;这里p也是存储一个地址。该地址指向一个整型的数据。所以可以p = array,就是表示将数组的首地址赋值给p。说白了,array[1]就等于*(p+1)。array[2]就表示*(p+2)。他们在外表上不同。其实经过编译器转换后是一样的。所以如果用p[1],和*(p+1)是完全等价的。
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马