變量的指針和指向變量的指針變量

指針和指針變量的定義:

一個變量的地址稱爲該變量的“指針”
例如,地址1000是變量i的指針。如果有一個變量專門用來存放另一變量的地址(即指針),則它稱爲“指針變量”

定義一個指針變量

定義指針變量的一般形式爲
基類型 *指針變量名;
說明
可以用賦值語句使一個指針變量得到另一個變量的地址,從而使它指向一個該變量
例子
float *pointer_3;
char *pointer_4;
pointer_1=&i;
pointer_2=&j;
在這裏插入圖片描述
注意

  1. 指針變量前面的“*”,表示該變量的類型爲指針型變量
    例 : float pointer_1;
    指針變量名是pointer_1 ,而不是
    pointer_1
  2. 在定義指針變量時必須指定基類型。
    需要特別注意的是,只有整型變量的地址才能放到指向整型變量的指針變量中。下面的賦值是錯誤的∶
    float a;
    int * pointer_1;
    pointer_1=&a;

指針變量的引用

注意:
指針變量中只能存放地址(指針)
不要將一個整數(或任何其他非地址類型的數據)賦給一個指針變量
例子 —— 通過指針變量訪問整型變量

#include <stdio.h>
void main()
{
     int a,b;
     int *pointer_1, *pointer_2;
     a=100;b=10;
     pointer_1=&a;  /*把變量a的地址賦給pointer_1 */  
     pointer_2=&b;  /*把變量b的地址賦給pointer_2 */
printf(″%d,%d\n″,a,b);
printf(″%d,%d\n″,*pointer_1, *pointer_2);
}

在這裏插入圖片描述

對“&”和“*”運算符說明:

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

  1. &* pointer_1的含義是什麼?
    “&”和“”兩個運算符的優先級別相同,但按自右而左方向結合。因此,& pointer_1與&a相同,即變量a的地址。
    如果有pointer_2 =&* pointer_1 ;它的作用是將&a(a的地址)賦給pointer_2 ,如果pointer_2原來指向b,經過重新賦值後它已不再指向b了,而指向了a
    在這裏插入圖片描述
  2. &a的含義是什麼?
    先進行&a運算,得a的地址,再進行
    運算。&a和pointer_1的作用是一樣的,它們都等價於變量a。即*&a與a等價
  3. (*pointer_1)++相當於a++
    例子 —— 輸入a和b兩個整數,按先大後小的順序輸出a和b
#include <stdio.h>
void  main()
{ int *p1,*p2,*p,a,b;
  scanf("%d,%d",&a,&b);
 p1=&a;p2=&b;
  if(a<b)
 {p=p1;p1=p2;p2=p;}
 printf("a=%d,b=%d\n\n″,a,b);
  printf("max=%d,min=%d\n″,*1,*2);
} 

在這裏插入圖片描述

指針變量作爲函數參數

例子 —— 對輸入的兩個整數按大小順序輸出

#include <stdio.h>
void main()
{void swap(int *p1,int *p2);
 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;
      temp=*p1;
     *p1=*p2;
     *p2=temp;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章