zoukankan      html  css  js  c++  java
  • 指针初探

    什么是指针
     
    指针就是地址,假设每个变量是一个房间,那指针就是这个房间的房间号,计算机就是通过房间号找到这些房间的。
    取地址运算符:&
    例如:一个定义为int a的整形变量,&a就表示为a的地址,甚至可以输出出来。
    输出结果在不同环境下,地址会不同,指针实际是unsigned int型,无符号整数
    #include<iostream>
    using namespace std;
    int main() {
    	int a=1;
    	cout << a << " " << &a << "
    ";
    	return 0;
    }
    
    /*	输出结果:1 00EFF9AC	
    
    指针变量
    指针变量就是用来存放指针的变量,常常在某种数据类型后加*来表示。
    int *p;
    double *p;
    char *p;
    
    需要注意的是:
    #include<iostream>
    using namespace std;
    int main() {
    	int a;
    	int *p=&a;	//等价于		int *p;		p=&a;
    	a = 1;		//a所在地址的房间里东西改变了,但这并不影响它的地址。
                         //等价于 *p=1;
    	cout << a << " " << &a <<" "<<*p<<"
    ";
    	return 0;
    }
    
    /*	输出结果: 1 00D6FC40 1	*/
    
    指针与数组
    数组是由若干个相同类型数据组合而成,如int a[10],a[0],a[1],a[2]......a[9]在地址上是连续的,a[0]的地址为&a[0],即数组a的首地址。
    C语言中,数组名称可以作为数组的首地址使用,即a=&a[0];
    #include<iostream>
    using namespace std;
    int main() {
    	int a[10] = { 1 };
    	int *p=a;				
    	cout << *p << "
    ";
    	return 0;
    }
    
    /*	输出结果:1	*/
    
    由于a+i与&a[i]等价,所以可以这样写
    scanf("%d", a + i);
    
    使用指针变量作为函数参数
    例:使用指针作为参数,交换两个值
    先举个反例,不用指针作参的
    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    void swap(int x, int y) {
    	int t = x;
    	x = y;
    	y = t;
    }
    
    int main() {
    	int a = 1, b = 2;
    	swap(a, b);
    	cout << a << " " << b << "
    ";
    	return 0;
    }
    
    /*	输出结果:1	2	*/
    
    为什么实际结果没有交换那,因为函数在接受参数的过程是一次性传递的,也就是,调用swap()时,把a,b的值传进去了,这里相当于产生一个副本,对主函数里的a,b并不影响。
    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    void swap(int *x, int *y) {
    	int t = *x;
    	*x = *y;
    	*y = t;
    }
    
    int main() {
    	int a = 1, b = 2;
    	swap(&a, &b);
    	cout << a << " " << b << "
    ";
    	return 0;
    }
    
    /*	输出结果:2  1	*/
    
    在上述代码中,把&a,&b作为参数传入,swap函数里边修改的是,*a,*b所以a,b交换了
  • 相关阅读:
    ffmpeg full help
    docker 服务命令
    php 查看swoole版本
    vue/cli 的启动
    TP框架的使用,不需要阿帕奇
    mysql 的文件恢复
    mac下使用iterm实现自动登陆
    跨库怎样查询
    swoole和websocket的关系
    mac上mysql的安装和使用
  • 原文地址:https://www.cnblogs.com/52dxer/p/10552633.html
Copyright © 2011-2022 走看看