指针
*
- 是取值运算符,对地址使用可以获得地址中储存的数值。对于指针a,*a表示取a中的值
- 在 定义 时, 是一个标识符,声明该变量是一个指针,比如说int p; 那p就是一个指向int型的指针
- 在 调用 时, p是指针p指向的那个变量,比如说之前有int a=5;int p=&a;那么p的值是a的地址,也就是指针p指向a, p则等于a的值,即p=5。
&
- &在 定义 时则是引用,比如说有定义int a=5;再定义int b=&a;那么这里的b则引用a的值,即b=5,而再给b赋值:b=10,a的值也会变为10。
- &在 调用 是地址运算符,对变量使用可以获得该变量的地址, 对于变量b,&b表示取b的地址
example
- 先定义有int x = 0;int *p = &x;
- 若定义函数: void fun1(int a){ a=5;} ,则调用:fun1(x); 之后,x还等于0;因为fun1函数只改变了形参a的值,a只是fun1函数里的局部变量,调用fun1(x)相当于是“a=x;a=5;”,x没变;
- 若定义函数:void fun2(int &a){ a=5;} , 则调用:fun2(x); 之后,x等于5;因为这里的a引用了x的值;
- 若定义函数:void fun3(int a){ a=5;} , 则调用:fun3(p); 之后,x也等于5;因为fun3函数的参数a是一个指针,相当于a=p; a则与 p指向同一地址,改变 a即改变p即x
- return *this:
strcpy和strncpy:
strcpy(char *ch1, char *ch2)
:
- 直接将ch2指向的由”\0”结束的字符串复制到ch1,ch1必须有足够的空间来存储ch2
- 若ch2长于ch1,还是会复制,但是ch1会溢出
*
strncpy(char *ch1, char *ch2, n)
:
- 将ch2中最多n个字符复制到ch1
- 如果n>ch1长度,ch1溢出
- 如果n<ch1长度,且如果
- ch2长度<=ch1长度,则ch2前n个字符复制到ch1
- ch2长度>ch1长度,出错
- 建议:将n设置为ch1长度