1. 程式人生 > >指針與指針變量深度理解及程序舉例(初學者)

指針與指針變量深度理解及程序舉例(初學者)

chang 括號 功能 沒有 變量 兩個 pointer 含義 初學者

如果已經執行了語句pointer_1=&a;

(1)&*pointer_1的含義是什麽?

“&”和“*”兩個運算符的優先級相同,但按自右向左方向結合,因此先進行*pointer_1的運算,再執行&運算。

因此,&*pointer_1與&a相同,即變量a的地址。

如果有:pointer_2=&*pointer_1;

它的作用是將&a(a的地址)賦給pointer_2。

(2)*&a的含義是什麽?

先進行&a運算,得a的地址,在進行*運算,即&a所指向的變量,即變量a。

*&a和*pointer_1的作用是一樣的,他們都等價於變量a,即*&a與a等價。

(3)(*pointer_1)++相當於a++;

註:括號是必要的,如果沒有括號,就變成了*pointer_1++,由運算符的優先級與結合方向可知,它相當於*(pointer_1++)。

例:輸入a和b兩個整數,按先大後小的順序輸出a和b。

#include <stdafx.h>
#include<stdio.h>

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

例:對輸入的兩個整數按大小順序輸出,這次用函數實現交換功能。

#include <stdafx.h>
#include<stdio.h>

void swap(int*p1,int*p2);
void main()
{
    int a,b;
    int*pointer_1,*pointer_2;
    scanf("%d%d",&a,&b);
    pointer_1
=&a; pointer_2=&b; if(a<b) { swap(pointer_1,pointer_2); } printf("\n%d>%d\n",a,b); } void swap(int*p1,int*p2) { int temp; printf("swapping"); temp=*p1; //temp=a; *p1=*p2; //a=b; *p2=temp; //b=temp; }

例:輸入a,b,c三個整數,按大小順序輸出。

#include <stdafx.h>
#include<stdio.h>

void swap(int*pt1,int*pt2);
void exchange(int *q1,int *q2,int *q3);
void main()
{
    int a,b,c,*p1,*p2,*p3;
    scanf("%d%d%d",&a,&b,&c);
    p1=&a;
    p2=&b;
    p3=&c;
    exchange(p1,p2,p3);
    printf("%d,%d,%d\n",a,b,c);
    
}
void exchange(int *q1,int *q2,int *q3)
{
    if(*q1<*q2)
    {
        swap(q1,q2);
    }
    if(*q1<*q3)
    {
        swap(q1,q3);
    }
    if(*q2<*q3)
    {
        swap(q2,q3);
    }
    
}
void swap(int*pt1,int*pt2)
{
    int temp;
    printf("swapping");
    temp=*pt1;  //temp=a;
    *pt1=*pt2;    //a=b;
    *pt2=temp;    //b=temp;
}

指針與指針變量深度理解及程序舉例(初學者)