c語言指針可以指向枚舉類型嗎?
C語言指針用法靈活,基本類型指針,
通用指針 void *
指針數組和數組指針
函數指針和指針函數
結構指針和聯合指針
枚舉指針
指針常量和常量指針
指針的指針
基本類型指針
指向整型和浮點型的指針。包括char,int,float,double類型指針
通用指針
void * 聲明一個通用指針,該指針可以和除函數指針類型之外指針類型相互轉換。
例如:
void *p;
int *ip;
p = ip;
ip = p;
指針數組和數組指針
指針數組:指針數組的每個元素都是指針類型。
例如:
// ip是數組類型,數組中每個元素是int型指針。
int *ip[];
// fp是數組類型,數組中每個元素是float型指針。
float *fp[];
數組指針:指針類型,指向數組。
例如:
int a[100] ; // 聲明和定義數組a
int *pa = a; // 聲明指針pa,并且將數組a的首地址賦值給pa
int a1 = *(pa+1); // 獲取數組a第2個元素的值,即a[1]的值
注:數組名本身就是當做地址常量賦值給指針,不需要 & 地址運算符。
函數指針和指針函數
函數指針指向特定函數類型的指針。
例如:
// fp是指針,指向 返回值為int型,有1個int型參數的一類函數
int (fp)(int);// fp是指針,指向 返回值為double型,有2個double型參數的一類函數double (fp)(double,double);
// fp是指針,指向 返回值為int型指針,有1個int型參數的一類函數
int (fp)(int);
注:指針函數是指返回值為指針類型的函數,本質上是函數類型;函數指針是指向函數類型的指針,本質上指針類型。
結構指針和聯合指針
指向結構類型、聯合類型的指針。
例如:
struct
枚舉指針
指向枚舉類型的指針。
例如:
enum
指針常量和常量指針
指針常量:指向常量的指針,指針本身是變量。
例如:
const int p = 1; // 定義常量p
const int *ptr = &p; // ptr是指針,指向const int *常量int型
int i = 2;
p = i; // 此時出錯,不能給常量賦值
ptr = &i; // 正確,ptr是指針變量,可以賦值
常量指針:指向變量的指針,指針本身是常量。
例如:
int p = 1; // 定義變量p
int const ptr = &p; // ptr是指針常量,指向變量int型
int i = 2;
p = i; // 正確,p是變量
ptr = &i; // 錯誤,ptr是常量指針
指針的指針
C語言支持多重指針,即指向指針的指針。
例如:以下都可以輸出變量i的值。
#include
輸出結果:
10