C語言中指標的使用方法
阿新 • • 發佈:2019-01-07
1.使用場景
使用指標時,必須將它指向一個變數的地址或者為它分配空間方能使用,如下所示:
#include<stdio.h> #include <stdlib.h> int main(int argc, char const *argv[]) { int a[5]={0,1,2,3,4}; int *b,*d; int c=2; int *e=a; //e指向a陣列首地址 //*b=2; 無法直接初始化 //printf("%d\n", *b); e=e+2; //移動兩個地址單元 d=&c; //d指向c的地址來表示值 c=4; //修改原c變數的值,d指標的值會發生改變 b=(int *)malloc(sizeof(int));//為b分配一個int型空間來直接儲存值 *b=2;//分配空間後可以直接賦值了 printf("this is e,b,c,d :%d %d %d %d\n",*e,*b,c,*d); return 0; }
2.型別說明
(1)int *a :表示一個指向int型變數的指標,指向的是變數的地址單元
(2)char *b:表示一個指向char變數的指標
*a表示的是這個指標指向地址的值,a為此指標本身的地址,這點要明確,一般用*(a+1)、*(a+2)來表示值,如
int nums[5]={0,1,2,3,4};
int *a=nums;
printf("%d %d %p\n",*a,*(a+1),a);
輸出為:
(3)結構體指標
typedef struct node{ int data; struct node * next; }pnode,*linklist; linklist p; p=(struct node*)malloc(sizeof(struct node));
p即結構體變數,它本身型別為struc node *型別,使用時,必須為它分配空間或指向此結構體物件地址方能進行下一步操作。
3.指標的運算
指標指向變數地址,若原變數的內容發生了變化,它本身也會發生變化,指標之間的運算一般為值運算和地址運算
(1)值運算:直接通過*運算方式,像a+*(a+1),結果為第一個元素與第二個元素相加。
int nums[5]={0,1,2,3,4};
int *a=nums;
(2)地址運算:通過a+i的方式.指標會指向a的下i個地址。
int nums[5]={0,1,2,3,4}; int *a=nums; a=a+2; printf("%d\n",*a);
結果輸出2