• 指针复习


    其实这篇文章曾经在初赛复习里。。。。

    定义:int * a = 地址;(int &a = 变量值)

    调用:a 表示 地址,* a 表示地址所对应的值。

    改变:a++ 等价于 a += sizeof(a 对应的变量的大小,如int就是4个字节)

    优先级:

    • 指针中,地址的优先级大于值的优先级。 * a++ 等价于 *(a++),如果想要使 a 指向的值++,需要加括号:(*a)++

    • 上面的 ( * a++) 如果输出的话,还只是输出之前的 (* a),因为指针中++的用法和普通变量是一样的,a++ 表示先操作再加,++a 表示先加再操作。如:

    #include<bits/stdc++.h>
    using namespace std;
    int a[10];
    int main(){
    	int n;
    	cin>>n;
    	for(int i=0;i<n;i++)cin>>a[i];
    	int *p=a;
    	cout<<*p<<endl;//输出a[0] 
    	cout<<*p++<<endl;//输出a[0] 
    	cout<<*p;//输出a[1] 
    	return 0;
    }
    
    

    代码中输出 * p++时是先输出 * p,再让指针p的地址++

    #include<bits/stdc++.h>
    using namespace std;
    int a[10];
    int main(){
    	int n;
    	cin>>n;
    	for(int i=0;i<n;i++)cin>>a[i];
    	int *p=a;
    	cout<<*p<<endl;//输出a[0] 
    	cout<<*++p<<endl;//输出a[1] 
    	cout<<*p;//输出a[1] 
    	return 0;
    }
    
    

    输出 * ++p时是先让p的地址++,再输出当前地址所对应的值。

    但是 += 在指针中和 ++ 不一样,指针 += 就是值加,不是地址加。

    函数:

    • swap:swap函数实际上是在交换两个地址所对应的值,动用了swap函数后,所指向那两个地址的指针的值也要相应的改变,处在那两个地址上的数组的值也要改变。

    . . . . . .

    添加一道指针题:

    程序阅读:

    #include<iostream>
    using namespace std;
    int a,b,c;
    
    int* cal(int *p,int &q,int r){
    	q+=r;
    	*p+=q;
    	return p;
    }
    
    int main(){
    	cin>>a>>b>>c;
    	c=*cal(&a,b,c);
    	cout<<a<<" "<<b<<" "<<c;
    }
    

    这道题让我第一次知道函数是可以当指针用的。。。

    b传进去的是地址,里面的值会发生变化,这个比较简单。

    *p+=q 中是 p 所指向的值加上 q 。

    这些知道了就很简单了。

  • 相关阅读:
    在游戏中充分利用可编程的GPU
    坐标变换
    深入理解GPU Architecture(上)
    RV870和GT300的一些猜测
    深入理解Intel Core Microarchitecture
    CGDC见闻
    hdu 1517 K(2~9)倍博弈
    hdu 2177 威佐夫博弈+输出使你胜的你第1次取石子后剩下的两堆石子的数量
    坚持住
    真正体会到一个ac的快感
  • 原文地址:https://www.cnblogs.com/tangzhiyang/p/11804645.html
Copyright © 2020-2023  润新知