user-0 提问: 小白想请教一下关于c语言指针数组输入问题

回复:
user: user-1
content: &a[i] == p+i a[i] == *(p+i)

user: user-2
content: 请参考《C++中对数组名的运算》 和《C++中指针的数组和数组的指针》 希望能够帮到你！

user: user-3
content: 引用 6 楼 自信男孩 的回复:#include<stdio.h> #include<stdlib.h>  typedef int elemtype;  typedef struct lnode{     elemtype data;     struct lnode *next; }lnode,*linklist;  void insert_sortlist(linklist &L,elemtype e) {     linklist p,s;     s=(linklist)malloc(sizeof(lnode));     if (!s)         exit(0);     s->data=e;     p = L;     while(p->next&&p->next->data <= e)         p = p->next;     s->next = p->next;     //s->next = s;     p->next = s; }  void create_sortlist(linklist &L) {     elemtype e;     L=(linklist)malloc(sizeof(lnode));     L->next=NULL;     printf("建立一个有序链表，输入整形数据以0结束\n");     scanf("%d",&e);     while(e)     {         insert_sortlist(L,e);         scanf("%d", &e);     } }  void mergeincrease(linklist &La,linklist &Lb,linklist &Lc) {     linklist p,q,s,rear;     p=La->next;     q=Lb->next;     Lc=rear=La;     free(Lb);     while(p&&q)     {         if(p->data<q->data)         {s=p;             p=p->next;         }         else         {s=q;             q=q->next;         }         rear->next=s;         rear=rear->next;     }     if(p)         rear->next=p;     else         rear->next=q;  }  void visit_link(linklist phead) {     linklist p = phead->next;      while (p) {         printf("%d ", p->data);         p = p->next;     }     putchar(10); }  /*void traverse(linklist Lc)   {   linklist p;   printf("合并后的链表为:");   for(p=Lc->next;p;p=p->next)   printf("%d",p->data);   printf("\n");   }*/  int main() {     linklist La,Lb,Lc;     create_sortlist(La);     visit_link(La);     create_sortlist(Lb);     visit_link(Lb);     mergeincrease(La,Lb,Lc);     linklist p;     printf("合并后的链表为:");     visit_link(Lc);     /*     for(p=Lc->next;p;p=p->next)         printf("%d",p->data);         */  } 供参考～ 抱歉，发错位置了。  &a[i]等价p+i；也等价a+i。

user: user-3
content: #include<stdio.h> #include<stdlib.h>  typedef int elemtype;  typedef struct lnode{     elemtype data;     struct lnode *next; }lnode,*linklist;  void insert_sortlist(linklist &L,elemtype e) {     linklist p,s;     s=(linklist)malloc(sizeof(lnode));     if (!s)         exit(0);     s->data=e;     p = L;     while(p->next&&p->next->data <= e)         p = p->next;     s->next = p->next;     //s->next = s;     p->next = s; }  void create_sortlist(linklist &L) {     elemtype e;     L=(linklist)malloc(sizeof(lnode));     L->next=NULL;     printf("建立一个有序链表，输入整形数据以0结束\n");     scanf("%d",&e);     while(e)     {         insert_sortlist(L,e);         scanf("%d", &e);     } }  void mergeincrease(linklist &La,linklist &Lb,linklist &Lc) {     linklist p,q,s,rear;     p=La->next;     q=Lb->next;     Lc=rear=La;     free(Lb);     while(p&&q)     {         if(p->data<q->data)         {s=p;             p=p->next;         }         else         {s=q;             q=q->next;         }         rear->next=s;         rear=rear->next;     }     if(p)         rear->next=p;     else         rear->next=q;  }  void visit_link(linklist phead) {     linklist p = phead->next;      while (p) {         printf("%d ", p->data);         p = p->next;     }     putchar(10); }  /*void traverse(linklist Lc)   {   linklist p;   printf("合并后的链表为:");   for(p=Lc->next;p;p=p->next)   printf("%d",p->data);   printf("\n");   }*/  int main() {     linklist La,Lb,Lc;     create_sortlist(La);     visit_link(La);     create_sortlist(Lb);     visit_link(Lb);     mergeincrease(La,Lb,Lc);     linklist p;     printf("合并后的链表为:");     visit_link(Lc);     /*     for(p=Lc->next;p;p=p->next)         printf("%d",p->data);         */  } 供参考～

user: user-4
content: p++与&a[i]等价的条件是：数组a是连续存储的。  就相当于你要去306、307、308拿东西，只要找到三楼第六个房间（306）就可以依次到房间里拿东西（p++)；而&a[i]相当于说：三楼第六个房间、三楼第七个房间、三楼第八个房间……

user: user-4
content: 指针是间接寻址，就相当于你在一张纸上记录了一个房间地址（比如几楼几室），要找到纸看到房间地址才能去房间里拿东西；取地址符是直接寻址，就是你知道房间在几楼几室，可以直接去房间里拿东西。  不要纠结于概念（为了考试除外），多看例子，多写程序，自然就懂了！

user: user-0
content: 引用 2 楼 user-5 的回复：没区别 你要问的是&a[i]和p+i吧，这两者等价的 都是指a[i]这个元素的地址书上写的for（略）scanf（”%d”,p++)；我就想问问大佬这个p++是否完全等价于&a[i]之间没有啥子区别吗

user: user-5
content: 没区别 你要问的是&a[i]和p+i吧，这两者等价的 都是指a[i]这个元素的地址

user: user-0
content: 引用 4 楼 screen_ok 的回复：指针是间接寻址，就相当于你在一张纸上记录了一个房间地址（比如几楼几室），要找到纸看到房间地址才能去房间里拿东西；取地址符是直接寻址，就是你知道房间在几楼几室，可以直接去房间里拿东西。  不要纠结于概念（为了考试除外），多看例子，多写程序，自然就懂了！谢谢

user: user-0
content: 引用 7 楼 自信男孩 的回复：[quote=引用 6 楼 自信男孩 的回复:] #include<stdio.h> #include<stdlib.h>  typedef int elemtype;  typedef struct lnode{     elemtype data;     struct lnode *next; }lnode,*linklist;  void insert_sortlist(linklist &L,elemtype e) {     linklist p,s;     s=(linklist)malloc(sizeof(lnode));     if (!s)         exit(0);     s->data=e;     p = L;     while(p->next&&p->next->data <= e)         p = p->next;     s->next = p->next;     //s->next = s;     p->next = s; }  void create_sortlist(linklist &L) {     elemtype e;     L=(linklist)malloc(sizeof(lnode));     L->next=NULL;     printf("建立一个有序链表，输入整形数据以0结束\n");     scanf("%d",&e);     while(e)     {         insert_sortlist(L,e);         scanf("%d", &e);     } }  void mergeincrease(linklist &La,linklist &Lb,linklist &Lc) {     linklist p,q,s,rear;     p=La->next;     q=Lb->next;     Lc=rear=La;     free(Lb);     while(p&&q)     {         if(p->data<q->data)         {s=p;             p=p->next;         }         else         {s=q;             q=q->next;         }         rear->next=s;         rear=rear->next;     }     if(p)         rear->next=p;     else         rear->next=q;  }  void visit_link(linklist phead) {     linklist p = phead->next;      while (p) {         printf("%d ", p->data);         p = p->next;     }     putchar(10); }  /*void traverse(linklist Lc)   {   linklist p;   printf("合并后的链表为:");   for(p=Lc->next;p;p=p->next)   printf("%d",p->data);   printf("\n");   }*/  int main() {     linklist La,Lb,Lc;     create_sortlist(La);     visit_link(La);     create_sortlist(Lb);     visit_link(Lb);     mergeincrease(La,Lb,Lc);     linklist p;     printf("合并后的链表为:");     visit_link(Lc);     /*     for(p=Lc->next;p;p=p->next)         printf("%d",p->data);         */  } 供参考～ 抱歉，发错位置了。  &a[i]等价p+i；也等价a+i。[/quote]谢谢

user: user-0
content: 引用 8 楼 棉猴 的回复：请参考《C++中对数组名的运算》 和《C++中指针的数组和数组的指针》 希望能够帮到你！谢谢