C指針學習草稿1(讀C語言的那些小祕密)

指針 通常用法數組

 (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];   

相關文章
相關標籤/搜索