#includeusing namespace std; int* func() { int a = 10; //不要返回局部变量的地址,栈区开辟的数据由编译器自动释放 return &a; //返回局部变量的地址 } int main() { int* p = func(); //用指针接收 cout << *p << endl; // 10 cout << *p << endl; //乱码 system("pause"); return 0; }
#includeusing namespace std; int* func(int b) //形参也是放在栈区里面的,形参数据也会放在栈区 { cout << b << endl; int* a = new int(10); //用地址编号进行返回 return a; } int main() { int* p = func(1); cout << *p << endl; cout << *p << endl; //利用delete释放堆区数据 delete p; //堆区里面的内容是用自己主动释放 释放了p这个指针指向的地址 //cout << *p << endl; //报错,释放的空间不可访问 system("pause"); return 0; }
#includeusing namespace std; void Swap(int& a, int& b) { //引用传递 int temp = a; a = b; b = temp; } int main() { !!!!引用,别名 !!!!这可不是指针,你们别搞混淆了,还是有区别的,引用在C里面是没有的 小理解:小名不能变成别人的小名 //int a = 10; //int b = 20; int &c; //错误,引用必须初始化 //int& c = a; //一旦初始化后,就不可以更改 //c = b; //这是赋值 *** 作,不是更改引用 //同时改变了a的值 //cout << "a = " << a << endl; //20 //cout << "b = " << b << endl; //20 //cout << "c = " << c << endl; //20 int a = 10; int b = 20; Swap(a, b); cout << a << endl; cout << b << endl; system("pause"); return 0; }
#includeusing namespace std; //引用使用的场景,通常用来修饰形参 void showValue(const int& v) { //v += 10; cout << v << endl; } int main() { //!!!!int& ref = 10; 引用本身需要一个合法的内存空间,因此这行错误 //引用不可以直接赋值,要有一个合法的内存空间, //常量引用 是可以直接赋值的 //加入const就可以了,编译器优化代码,int temp = 10; const int& ref = temp; const int& ref = 10; //ref = 100; //加入const后不可以修改变量 cout << ref << endl; //函数中利用常量引用防止误操作修改实参 int a = 10; showValue(a); a = 100; system("pause"); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)