C中指针符*和取址符&

学习了C语言以后,关于指针部分看了无数遍,有时候明明以为本身看懂了,指针就是地址,可是老是在看代码时候糊里糊涂的搞不明白,最近又关于指针强化了一把。编程

大部分状况下对于程序中指针糊涂是由于不明白指针符“*”有两个做用:函数

第一,做为标识符,定义变量为指针,如int *p;//只是说明变量p是指针变量,而没有实际意义。学习

第二,做为运算符,像+,—,运算符同样,如cout<<*p;//输出指针变量p所指向的内容。spa

通常在程序中,第一次出现的指针符*,是做为标识符,申明指针变量,以后出现是做为运算符,但也不必定,主要仍是看程序语境。指针

而“&”符号是一元运算符,取变量地址。code

 

好了,关于指针我目前使用最多的是做为参数传递。因为本身研究图像处理,程序中每每要处理上千的图片,内存经常溢出,内存分配尤为重要,这时候我被迫学习了指针的使用。对象

面向对象编程函数传递每每是值传递,可是值传递的形参是实参的拷贝,若是此时我用值传递,上千张图片在内存中再拷贝一份可想而知,因此考虑用指针传递。blog

//指针传递

void swap(int *a,int *b)
{
     int temp;
     temp=*a;
     *a=*b;
     *b=temp;
     cout<<*a<<‘  ’<<*b<<’\n’;
}

int main(){
    int x=1;
    int y=2;
    swap(&x,&y);
    cout<<x<<‘  ’<<y<<’\n’;

}
//输出2 1 , 2 1

  

上段程序中,实参传递的是x,y 的地址,形参定义a,b为指针变量,a,b内容为x,y地址的拷贝,程序中*a,*b是x,y地址所指向的内容,即为x,y。图片

因此程序中操做的也是x,y自己,此程序不须要从新在内存中开辟新的空间,之间操做实参自己。内存

 

另外一种传递方式,引用传递,做用和指针传递同样

//引用传递:

void swap(int &a,int &b)
{
     int temp;
     temp=a;
     a=b;
     b=temp;
     cout<<a<<’ ‘<<b<<’\n’;
}

int main(){
    int x=1;
    int y=2;
    swap(x,y);
    cout<<x<<’ ‘<<y<<’\n’;
    return 0;
}

上段代码跟指针传递结果同样,均输出2 1 , 2 1

函数调用形式跟值传递同样,可是被调用函数的形参则引用x,y 的地址,函数中操做的也是x,y自己。

相关文章
相关标签/搜索