1,指針變量存放的是4個字節,如果變量的所占字節超過四個字節給出代碼:
1 #include <stdio.h> 2 int main(int argc, char *argv[]) 3 { 4 double arr[]={1,2,3,4,5}; 5 double * p=&arr[0]; 6 printf("%p\n",p); 7 p=&arr[1]; 8 printf("%p\n",p); 9 10 return 0; 11 }
2,如果使用一個沒有返回值得函數修改指針變量的地址,代碼如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 void p_add(double **q); 4 int main(int argc, char *argv[]) 5 { 6 double arr[]={1,2,3,4,5}; 7 double * p=&arr[0]; 8 printf("%p\n",p); 9 p_add(& p); 10 printf("%p\n",p); 11 return 0; 12 } 13 void p_add(double **q) 14 { 15 *q=(double *)malloc(sizeof(double *)); 16 }
3,指針和數組的關系,知道數組的首地址和長度,那麼可以用指針來表示這個數組了
1 #include <stdio.h> 2 #include <stdlib.h> 3 void output( int*q,int len); 4 int main(int argc, char *argv[]) 5 { 6 int arr[]={1,2,3,4,5}; 7 int len=sizeof(arr)/sizeof(arr[1]);//一定是個正整數 8 output(arr,len) ; 9 return 0; 10 } 11 void output(int *q,int len) 12 { 13 int id;//c 語言需要先聲明 14 for(id=0;id<len ;id++ ) 15 { 16 printf("%d\t",*(q+id)); 17 //printf("%d\t",q[id]); 18 } 19 printf("\n"); 20 }
其實指針和數組並非一個概念,他們之間是有區別的,比如第7行,數組名arr作為數組首地址等同於&arr[0],但是sizeof(arr)跟sizeof(arr[0])和sizeof(q) 是兩回事,以後會再說
未完待續……