1 #pragma region 指针++,指针内存储的地址增加m位,m根据存储内容的所占字节数的大小决定 2 3 //这里通过一个顺序表来说明这一关系 4 using namespace std; 5 typedef int Status; 6 typedef int ElemType; 7 constexpr auto MAXSIZE = 100;// 最大长度; 8 typedef struct SqList { 9 ElemType *elem;//基地址 10 int length;//实际长度 11 }SqList; 12 13 Status InitLsit_Sq(SqList &L) {//构造一个空的顺序表;&表示可以双向传递,实参把值传给形参,形实合一 14 L.elem = new ElemType[MAXSIZE];//为顺序表分配空间;new申请MAXSIZE个ElemType类型的空间 15 if (!L.elem) exit(OVERFLOW);//存储空间分配失败 16 L.length = 0;//空表长度为0 17 return 1; 18 } 19 20 Status ListInsert_Sq(SqList &L, int i, ElemType e) {//有返回值 21 if (i<1 || i>L.length + 1) return 0;//判断插入位置是否合法 22 if (L.length == MAXSIZE) return 0;//判断存储空间是否已满 23 for (int j = L.length; j >= i - 1; j--) {//n到i元素向后移动 24 L.elem[j + 1] = L.elem[j]; 25 } 26 L.elem[i - 1] = e;//e放置第i个位置 27 ++L.length;//表长+1 28 return 0; 29 } 30 31 //根据元素内容e获取元素位置i 32 int LocateElem(SqList L, ElemType e) { 33 //查找不影响线性表长度和内容,实参内容值已被用户给出 34 for (int i = 0; i < L.length; i++) 35 if (L.elem[i] == e) return i + 1; 36 return 0;//当for语句表达式为假||if表达式为假时执行return 0 37 } 38 #pragma endregion 39 40 int main() 41 { 42 SqList B;//B为创建顺序表的名称 43 InitLsit_Sq(B); 44 //顺序表B的值依次为2、3、4 45 ListInsert_Sq(B, 1, 2); 46 ListInsert_Sq(B, 2, 3); 47 ListInsert_Sq(B, 3, 4); 48 int *p1 = &(B.elem[0]); 49 int *p2 = &(B.elem[1]); 50 int *p3 = &(B.elem[2]); 51 int *p4 = p1++;//先赋值给p4,然后作p1++ 52 printf("%0x, %0x, %d, %d\n", p1, &(B.elem[0]), *p1, (B.elem[0])); 53 printf("%0x, %0x, %d, %d\n", p2, &(B.elem[1]), *p2, (B.elem[1])); 54 printf("%0x, %0x, %d, %d\n", p3, &(B.elem[2]), *p3, (B.elem[2])); 55 printf("%0x, %0x, %d, %d\n", p4, &(B.elem[0]), *p4, (B.elem[0])); 56 }