在建立一個陣列a[10]后,指標p指向a之后寫輸入陳述句scanf,而&a[i]與p++之間有什么區別嗎?感謝大佬們指導一番謝謝!!
uj5u.com熱心網友回復:
&a[i] == p+i
a[i] == *(p+i)
uj5u.com熱心網友回復:
沒區別
你要問的是&a[i]和p+i吧,這兩者等價的
都是指a[i]這個元素的地址
uj5u.com熱心網友回復:
參考 2 樓 yukint 的回復: 沒區別
你要問的是&a[i]和p+i吧,這兩者等價的
都是指a[i]這個元素的地址 書上寫的for(略)scanf(”%d”,p++);我就想問問大佬這個p++是否完全等價于&a[i]之間沒有啥子區別嗎
uj5u.com熱心網友回復:
指標是間接尋址,就相當于你在一張紙上記錄了一個房間地址(比如幾樓幾室),要找到紙看到房間地址才能去房間里拿東西;取地址符是直接尋址,就是你知道房間在幾樓幾室,可以直接去房間里拿東西。
不要糾結于概念(為了考試除外),多看例子,多寫程式,自然就懂了!
uj5u.com熱心網友回復:
p++與&a[i]等價的條件是:陣列a是連續存盤的。
就相當于你要去306、307、308拿東西,只要找到三樓第六個房間(306)就可以依次到房間里拿東西(p++);而&a[i]相當于說:三樓第六個房間、三樓第七個房間、三樓第八個房間……
uj5u.com熱心網友回復:
#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=https://bbs.csdn.net/topics/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);
*/
}
供參考~
uj5u.com熱心網友回復:
參考 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=https://bbs.csdn.net/topics/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。
uj5u.com熱心網友回復:
請參考《C++中對陣列名的運算》
和《C++中指標的陣列和陣列的指標》
希望能夠幫到你!
uj5u.com熱心網友回復:
參考 8 樓 棉猴 的回復: 請參考《C++中對陣列名的運算》
和《C++中指標的陣列和陣列的指標》
希望能夠幫到你! 謝謝
uj5u.com熱心網友回復:
參考 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=https://bbs.csdn.net/topics/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。謝謝
uj5u.com熱心網友回復:
參考 4 樓 screen_ok 的回復: 指標是間接尋址,就相當于你在一張紙上記錄了一個房間地址(比如幾樓幾室),要找到紙看到房間地址才能去房間里拿東西;取地址符是直接尋址,就是你知道房間在幾樓幾室,可以直接去房間里拿東西。
不要糾結于概念(為了考試除外),多看例子,多寫程式,自然就懂了! 謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/101683.html
標籤:C語言
上一篇:如何識別出雙位元組字符,比如漢字
下一篇:約瑟夫問題