c语言指针
指针虐我千百遍,我代指针如初恋,刚开始学习指针时感到很迷惑,现在看来指针知识充当一个中间人的角色,从内存上看指针空间用来存储数据的地址。
#include<stdio.h>
void add_1(int num)
{
num++;
}
void add_2(int *num)
{
(*num)++;
}
int main()
{
int number1 = 1,number2 = 1 ;
add_1(number1);
add_2(&number2);
printf("%d\n",number1);
printf("%d\n",number2);
return 0;
}
number1的值保持不变,number2则增加了1,add_1()中传参相当于开辟了一个空间将number1的值复制到了该空间,对复制值所进行的所有操作对原来的数据没有任何影响。而add_2()中传参则是开辟一个空间储存number2地址,对num的所有操作等于对number2的操作。
c++ 引用
下面的代码和上面的代码几乎一样,修改的仅是几个符号,但效果是一样的。
#include<iostream>
using namespace std;
void add_1(int num)
{
num++;
}
void add_2(int &num)
{
num++;
}
int main()
{
int number1 = 0, number2 = 0;
add_1(number1);
add_2(number2);
cout << number1 << " " << number2 << endl;
return 0;
}
c++引用就是将number2取了个别名,实际在内存上存储的还是number2内存地址,只是编译器进行了一些优化和限制,就像我对计算机科学理解的一样,不同的组织方式形成了不同的计算机体系结构。
c++引用作为返回值
#include<iostream>
using namespace std;
int n = 3;
int& func()
{
return n;
}
int main()
{
int num;
num = func();
cout<<num <<endl;
return 0;
}
函数返回的时指向n的隐式指针,但需要被引用的对象不得超过作用域,也就是说看变量是作用于那个函数体内的,像上面全局变量就可以被引用,但如果放在func函数内就不可以了。
c++引用与指针的一些区别
- 指针可以空指针,但引用必须指向一块合法的地址空间。
- 指针可以从一个对象指向另一个对象,但引用一旦被初始化对象,则不可更改对象。
- 指针可以在任何时间进行初始化,但引用必须在创建时初始化。