做电子商务网站注册哪一类商标,四会建设局网站,网页设计培训学费多少钱,东莞企业网络营销平台1 C中指针与引用的区别
引用相当于起别名int m;
int n m;n 相当于 m 的别名#xff08;绰号#xff09;#xff0c;对 n 的任何操作就是对m的操作。
所以 n 既不是m的拷贝#xff0c;也不是指向 m 的指针#xff0c;其实n就是 m 它自己。 引用的注意事项#xff…1 C中指针与引用的区别
引用相当于起别名int m;
int n m;n 相当于 m 的别名绰号对 n 的任何操作就是对m的操作。
所以 n 既不是m的拷贝也不是指向 m 的指针其实n就是 m 它自己。 引用的注意事项
1 引用被创建的同时必须被初始化指针则可以在任何时候被初始化 2 不能有 NULL 引用引用必须与合法的存储单元关联指针则可以是 NULL 3 一旦引用被初始化就不能改变引用的关系指针则可以随时改变所指的对象
例如
int i 5;
int j 6;
int k i;
k j; //将k和i的值都变为了6语句 k j 并不能将 k 修改成为 j 的引用只是把k的值改变成为 6。
由于 k 是 i 的引用所以i的值也变成了 6。 引用的主要功能是传递函数的参数和返回值。
C 语言中函数的参数和返回值的传递方式有三种值传递、指针传递和引用传递。
1 值传递
void Func1(int x)
{ x x 10;
}
...
int n 0;
Func1(n);
cout n n endl; // n 0 2 指针传递
void Func2(int *x)
{ (* x) (* x) 10;
}
...
int n 0;
Func2(n);
cout n n endl; // n 103 引用传递
void Func3(int x)
{ x x 10;
}
...
int n 0;
Func3(n);
cout n n endl; // n 10x 和 n 是同一个东西改变 x 等于改变 n 2 C指针的引用*
如果想在一个函数中修改指针的指向并且在退出函数后这种操作保留就需要使用指针的引用
#include iostream
using namespace std;struct point {int x;int y;
};void changenum1(point *pnum) { //point *pnum表示指向point类型的指针的引用即point*类型变量的引用pnum new point;pnum-x 4;
}void changenum2(point *pnum) {pnum new point;pnum-x 4;
}void test1() {point *num new point;num-x 10;changenum1(num);std::cout 指针引用 num-x endl;
}void test2() {point *num new point;num-x 10;changenum2(num);std::cout 指针 num-x endl;
}int main() {cout 开始执行程序 endl;test1();test2();cout 执行程序完毕 endl;return 0;
}
point *pnum
表示指向point类型的指针的引用(即point* 类型变量的引用)point *pnum point* pnum(比较好理解)3 题目
设计在单链表中删除值相同的多余结点的算法
算法
typedef struct list
{int data;struct list *next;
}LNode;void deleteLike(LNode* head)
{LNode *p,*q,*s;for(phead;p!0;pp-next){for(qp-next,sq; q!0; )if (q-datap-data) //删除相同值的节点 {s-nextq-next; free(q);qs-next;}else{ sq;qq-next;}}
}完整代码
#includestdio.h
#includestdlib.h#define N 10typedef struct list
{int data;struct list *next;
}LNode;void deleteLike(LNode* head)
{LNode *p,*q,*s;for(phead;p!0;pp-next){for(qp-next,sq; q!0; )if (q-datap-data) //删除相同值的节点 {s-nextq-next; free(q);qs-next;}else{ sq;qq-next;}}
}LNode *creatlist(int *a)
{LNode *h,*p,*q; int i;hp(LNode *)malloc(sizeof(LNode));for(i0; iN; i){q(LNode *)malloc(sizeof(LNode));q-dataa[i]; p-nextq; pq;}p-next0;return h;
}void outlist(LNode *h)
{LNode *p;ph-next;if (pNULL) printf(\nThe list is NULL!\n);else{printf(\nHead);do {printf(-%d,p-data); pp-next; } while(p!NULL);printf(-End\n);}
}int main( )
{ LNode *A; int a[N]{1,3,4,1,10,3,4,8,6,8};Acreatlist(a);deleteLike(A);outlist(A);return 0;
}