1.指針:地址數組
指針變量:存放指針的變量函數
指針變量的定義:數據類型 *指針變量名 或者 數據類型* 指針變量名spa
指針變量的初始化:int *p=&a;int *p=NULL;(不能先定義後初始化)指針
用*p獲取指針變量指向的內存空間code
若是指針變量定義之後不進行初始化,這個指針變量存放的是一個垃圾數,這個指針變量,稱爲野指針blog
用函數實現變量值的交換,傳遞指針內存
// // main.c // 變量值交換 // // Created by fanyafang on 15/11/4. // Copyright 2015年 itcast. All rights reserved. // #include <stdio.h> void change(int *a,int *b){ //用兩個指針變量接收地址 //交換地址中所存的內容 //這樣函數執行完之後,指針所指向的內容已經發生了改變 int temp=0; temp=*b; *b=*a; *a=temp; } int main(int argc, const char * argv[]) { int a=3,b=4; change(&a,&b); printf("a=%d,b=&b",a,b); return 0; }
2.指針的應用場景it
1)在被調函數中能夠修改主調函數的值io
2)讓函數能夠有多個返回值(把地址傳過去,能夠修改地址指向的值)ast
3.二級指針
int **p1=&p;//p是一個一級指針
4.數組指針
指向數組的首地址
int a[4]={1,2,3,4};
int *p=a;
p+1指向數組的下一個元素
p-1指向數組的上一個元素
*(p+1)取得p+1對應的存儲單元的內容
*(a+1)同上
*p++至關於*(p++)
*a++這樣寫是錯誤的,由於a是一個常量
5.一維指針數組
int a=0,b=0,c=0;
int *pa[3]={&a,&b,&c};//數組的值是地址
6.指針變量之間的運算-相減 判斷兩個指針變量之間相隔幾個元素
7.用數組名訪問二維數組
二維數組能夠看作是特殊的一維數組
a;a+1;a+2是行指針
a[i]+j是列指針
第一行的首地址a[1]或a+1;
第二行第一個元素的地址:*(a+1)或者&a[1][0]
a=&a[0]=&a[0][0]=a[0]
8.二維數組指針-指向二維數組的指針
int a[2][3];
int (*p)[3]=a;//定義行數組指針
p=a;
p+1指向第一行
二維數組指針能夠替代數組名使用
9.指針數組和二維數組指針的區別
指針數組int *p[3];//數組裏放的是地址,是多個指針
二維數組指針 int (*p)[3];//指向二維數組的指針,是一個指針