7
29
2015
2

关于指针的操作

    wy今天打了一道高精题,被O(n)的赋值语句导致的TLE虐的体无完肤/(ㄒoㄒ)/~~

    然,同机房的神犇P竟用FFT卡过了?!蒟蒻wy表示为此也是操碎了心。。。

    无奈之下,懒人wy只好学习一下指针。。。

 

    持续更新中,请勿吐槽。。。。。。

据机房金牌爷Gwy提供的材料,

一个指针包含两方面的含义:

1、存储单元表示的地址

2、指针指向的存储单元的数据类型

 

&取地址运算符  &a是a变量的地址

* 指针运算符   *p代表指针变量指向的对象

 

下面做一个试验,

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int a=100, b=10;
    int *pa=&a, *pb=&b;
    printf("a=%d, b=%d\n", a, b);
    printf("pa=%p, pb=%p\n", pa, pb);
    printf("*pa=%d, *pb=%d\n", *pa, *pb);
}

结果是这样的。。。

                        

 

指针变量作为函数参数是将一个变量的地址传送到另一个函数中

 

再来一个试验。。。

#include<stdio.h>
#include<iostream>
using namespace std;

void swap(int *p1, int *p2)
{
    int tmp;
    tmp = *p1;
    *p1 = *p2;
    *p2 = tmp;
}

int main()
{
    int a, b;
    int *p1, *p2;
    scanf("%d%d", &a, &b);
    p1 = &a;
    p2 = &b;
    if(a<b) swap(p1, p2);
    printf("max=%d, min=%d\n", a, b);
}

结果如下

                       

 

在利用指针变量的时候,我们可以改变指针所指向的变量的值,但不可以改变指针的值。

 

指针变量既可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。

 

int a[10]={1,2,3,4,5,6,7,8,9,0};
int *p;
p = &a[0];
p = a;
//上面的两种赋值方法是一样的效果,都是将a数组的第一个元素的地址赋值给p指针。

 

当指针指向数组元素的时候会出现指针的运算。。。

p++,p--,p+n,p-n,p1-p2(只有当两个指针指向同一个数组的时候才有效)

但是两个指针的相加是毫无意义的。

 

注意!!!

*p++ (*和p是同级别的,相当于*(p++))

*(p++) 先得到*p的值,然后p++; *(++p) 先p++,然后得到*p的值

++(*p) 如果*p=3, ++(*p)=4

 

void inv(int x[], int n)
{
    int tmp, i,j, m=(n-1)/2;
    for(i=0; i<=m; i++)
    {
        j=n-i-1;
        tmp = x[i];
        x[i]=x[j];
        x[j]=tmp;
    }
    return;
}

数组名做形参的时候,编译器是当做指针来处理的,所以形参数组内容的改变会改变实参内容。

而且做形参时int x[]一定不能定义大小,因为此时是int x[]一个指针。

Category: 学习&复习 | Tags: 指针 ing | Read Count: 615

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com