建立順序表-看代碼:
/*建立順序表*/
void CreateList(SqList * &L,ElemType a[],int n)
{
int i=0,k=0;
L = (SqList *)malloc(sizeof(SqList));
while(i<n)
{
L->data[k] = a[i];
k++;
i++;
}
L->length = k;
}
/*建立順序表*/
void CreateList(SqList * L,ElemType a[],int n)
{
int i=0,k=0;
while(i<n)
{
L->data[k] = a[i];
k++;
i++;
}
L->length = k;
printf("%d\n",L->length);
}
一、區(qū)別1
- SqList * &L 將指針作為函數(shù)的參數(shù),同時(shí)使用了c++函數(shù)參數(shù)傳遞中的引用傳遞,* &L為指針的類型引用臭埋,引用即為給另一個(gè)變量起一個(gè)別名
int i,j;
int &a = i; a為引用名踪央,i為被引用的變量名
j = 10;
a = j; 等價(jià)于 i = j
- Sqlist * L 將指針作為函數(shù)的參數(shù),* L是指針變量瓢阴,一個(gè)用來(lái)保存地址的變量畅蹂。在這里是一個(gè)指向順序表,存儲(chǔ)順序表的地址的變量荣恐。
二液斜、共同點(diǎn)
- SqList * &L 和 SqList * L均為將指針作為函數(shù)的參數(shù)進(jìn)行傳遞
- 都指向順序表 L ,如果在函數(shù)中修改L 的內(nèi)容叠穆,都會(huì)影響到 L 的內(nèi)容
- 以下的兩種方式對(duì)L的修改結(jié)果相同:
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;
/*建立順序表*/
void CreateList(SqList * &L,ElemType a[],int n)
{
int i=0,k=0;
L = (SqList *)malloc(sizeof(SqList));
while(i<n)
{
L->data[k] = a[i];
k++;
i++;
}
L->length = k;
printf("%d\n",L->length);
}
int main()
{
SqList * List;
ElemType a[10]={1,2,3};
int n = 10;
List = (SqList *)malloc(sizeof(SqList));
void CreateList(SqList * &L,ElemType a[],int n);
CreateList(List,a,n);
printf("List中data的值為: ");
for(int i=0;i<n;i++)
printf("%d ",List->data[i]);
printf("List中l(wèi)ength的值為: ");
printf("%d\n",List->length);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;
/*建立順序表*/
void CreateList(SqList * L,ElemType a[],int n) //區(qū)別一:此處使用指針
{
int i=0,k=0;
//區(qū)別二:并沒有重新分配地址空間
while(i<n)
{
L->data[k] = a[i];
k++;
i++;
}
L->length = k;
printf("%d\n",L->length);
}
int main()
{
SqList * List;
ElemType a[10]={1,2,3};
int n = 10;
List = (SqList *)malloc(sizeof(SqList));
void CreateList(SqList * &L,ElemType a[],int n);
CreateList(List,a,n);
printf("List中data的值為: ");
for(int i=0;i<n;i++)
printf("%d ",List->data[i]);
printf("List中l(wèi)ength的值為: ");
printf("%d\n",List->length);
return 0;
}
resoult.png
三少漆、區(qū)別2
- 在函數(shù)中修改指針本身所指向的地址,* L不會(huì)發(fā)生改變硼被,* &L會(huì)發(fā)生改變
-
* &L
是引用類型的指針示损,代表的是原指針,我們?cè)诤瘮?shù)中對(duì)指針的操作嚷硫,都是直接對(duì)原指針的操作检访,無(wú)論是指針的內(nèi)容,還是指針指向的地址论巍,都會(huì)發(fā)生改變烛谊。 -
*L
是一個(gè)拷貝的過(guò)程风响,我們?cè)诤瘮?shù)中改變 *L 所指向的地址嘉汰,不是在對(duì)原變量進(jìn)行改變,而是對(duì)原變量的一個(gè)復(fù)制體進(jìn)行改變状勤,改變了復(fù)制體鞋怀,卻沒有改變本體。
wireframes.png
/*建立順序表*/
void CreateList(SqList * &L,ElemType a[],int n)
{
int i=0,k=0;
L = (SqList *)malloc(sizeof(SqList)); ********修改了地址
while(i<n)
{
L->data[k] = a[i];
k++;
i++;
}
L->length = k;
printf("%d\n",L->length);
}
resoult.png
/*建立順序表*/
void CreateList(SqList * L,ElemType a[],int n)
{
int i=0,k=0;
L = (SqList *)malloc(sizeof(SqList)); //******如果在這里修改地址持搜,則List不會(huì)發(fā)生任何變化
while(i<n)
{
L->data[k] = a[i];
k++;
i++;
}
L->length = k;
printf("%d\n",L->length);
}
resoult.png