指針 通常用法數組
(1)pointer_1=&a;指的是pointer_1與a指向的是同一個存儲空間,這個空間呢就是存放變量a的空間ide
(2)定義指針類型是由於指針移動時的須要函數
(3)pointer_1=&a;pointer_1=&b;這代表指針pointer_1指向的存儲空間改變了this
(4)變量之間的賦值僅限於當條語句,在後面修改後不會同時改變spa
eg: a =b;指針
b = 5;內存
此時a不會等於5字符串
指針用做函數參數(一級指針)string
(1)函數中的參數一般有傳值與傳址一說it
(2)交換函數比計較
swap(int *p1,int *p2)
{
int *temp;
temp=(int *)malloc(sizeof(int));
*temp=*p1;
*p1=*p2;
*p2=*temp;
free(temp);
}
上面這個函數在函數體中僅僅是改變了局部變量p1與p2的值
swap(int *p1,int *p2)
{
int *temp;
temp=p1;
p1=p2;
p2=temp;
}
上面這個函數在函數體中操做的纔是p1p2指向的地址
一維指針域一維數組
(1)數組的指針與指針數組
數組的指針就是數組的起始地址,數組元素的指針是數組元素的地址。指針優勢是使得目標程序佔內存少、運行速度快,從而使得其質量更高。
(2)數組與指針變量用法
int a[8];
int *p;
p = a;
數組下標使用a[k];
數組名指針用*(a+k));
指針變量使用*p++;
一維指針二維指針與二維數組
int b[4][4];
int *pp=&b[0][0]; //指針
int **ppp=&pp; //指向指針的指針
for(*ppp;*ppp<(&b[0][0]+16);(*ppp)++)
printf("%d\t",**ppp);
for(pp=&b[0][0];pp<(&b[0][0]+16);pp++)
printf("%d\t",*pp);
字符串
一、用字符數組存放一個字符串
char str[ ]="this is str!!!";
在此 str 是一個數組名,表明字符串數組的首地址。
二、用字符指針指向一個字符串
char *str="this is str,too";
拷貝字符串的函數實現
void copy_string(char from[],char to[])
{
int i=0;
while(from[i]!='\0'){
(to[i]=from[i]);
i++;
}
to[i]='\0'; //注意這條語句
return ;
}
void copy_string(char from[],char to[])
{
int i=0;
while((to[i]=from[i++])!='\0'){
;
}
void copy_string(char *from,char *to)
{
int i=0;
while(*from!='\0')
*to++=*from++;
*to='\0';
return ;
}
指針數組與數組指針
指針數組指的是一個數組,數組中的每一個元素都是指針類型,全部的指針都指向不一樣的
地址,所指的地址的數據也不必定同樣,可是所指的數據類型必須同樣。 int *ptr[4];
數組指針指的是定義的是一個指針,而指針指向的是數組,指針指向數組首單元的地址,對於數組內部元素的屬性不瞭解,僅僅是規定了數組首單元的地址,經過它能夠找到整個數組。 int (*ptr)[10];