指针

指针是用来专门存放地址的数据类型
1、定义一个指针时,必须规定它指向的变量类型,如int* p
【注意:如果写成int * ipa,ipb,ipc,其实只有ipa是指针类型,ipb、ipc还是int类型】
2、最好能初始化,即int a=47;int* p=&a;,C++编程的一般原则是定义时初始化

指针传递
通常,向函数传递参数时,在函数内部生成该参数的拷贝,称为“按值传递”。
如果我们传递一个指针给函数,实际上就是传递外部对象的别名,使函数能修改外部对象。(外部对象:如以下程序中,对于f(),main中的x就是外部对象)

#include <iostream>
using namespace std;

void f(int* p){
    cout<<"p= " <<p <<std::endl;
    cout<<"*p= "<<*p<<std::endl;
    *p=5;
    cout<<"*p= "<<p<<std::endl;
}
int main(){
    int x=47;
    cout<<"x= "<<x<<std::endl;
    cout<<"&x= "<<&x<<std::endl;
    //传入指针
    f(&x);
    cout<<"x= "<<x<<std::endl;
    return 0;
}

int *p=&x; 定义指针
*p:取指针p指向的变量的值
&x:取变量x的地址

引用传递
引用传递参数,不用int*传递指针,而是用int&传递实参的引用,带引用的参数调用比带指针的函数调用在语法上更加清晰。

#include <iostream>
using namespace std;
void f(int& r){
    //用int&r作为引用参数,直接传递调用者参数的地址
    cout<<"&r= "<<r<<endl;
}
int main(){
    int x=47;
    f(x);
    return 0;
}

理解:
1、指针是指向一个变量的,保存的是该变量的地址,相当于该变量的一个别名,指针传递参数相当于保存了该变量的地址,传递给调用函数,咋调用函数中通过指针拿到该变量值
2、引用传递,实际上就是传递实参,而被调用函数的形参是该实参的引用。

void*:意味着任何类型的地址都可以间接引用那个地址。
int*:只能针对int类型变量的地址可以间接引用那个地址。
一旦间接引用void*,就会丢失关于类型的信息,使用前必须转换。

int i=99;
void* vp=&i;
*((int*) vp)=3;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值