c語言學習筆記--指針

#include<stdio.h>
void swap(int *p1,int *p2){
 int temp;
 temp = *p1;
 *p1 = *p2;
 *p2 = temp;
}
void main(){
 int a = 1,b = 2;
 int *p1 = &a,*p2 = &b;
 printf("a=%d,b=%d",a,b);
 swap(p1,p2);
 printf("a=%d,b=%d",a,b);
}

1.p1,p2爲指針變量,值爲a,b地址。

2.swap實現將指針p1,p2指針指向的對象的值交換。

3.printf中的符號含義:

   %d:輸入輸出爲整形 %ld 長整型 %hd短整型 %hu無符號整形 %u %lu
   %s:輸入輸出爲字符串 %c字符
   %f:輸入輸出爲浮點型 %lf雙精度浮點型

#include<stdio.h>
int main(){
 int a = 1,b = 10;
 int *p1=&a,*p2=&b;
 printf("a的地址爲%d\n",p1);
 printf("b的地址爲%d\n",p2);
 printf("*(p1-1)的值爲%d\n",*(p1-1));
 return 0;
}

1.數據保存在棧中,地址由高到底,int型數據爲4個字節,a,b地址相差4個字節。

2.*(p1-1)指向b,p1減一,內存中向低地址移動4個字節。

指針函數

#include <stdio.h>
#include <string.h>
int *max(int x[],int y[],int *p,int *c){
 int temp=x[0];
 for(int i = 1;i<=9;i++){
  if(temp<=x[i]){
   temp = x[i];
   *p = i;
   *c = 1;
  }
 }
 for(int ii = 1;ii<=9;ii++){
  if(temp<=y[ii]){
   temp = y[ii];
   *p = ii;
   *c = 2;
  }
 }
 return 0;
}
void main(){
 int *p1,m,n;
 int a[10]={0,1,2,3,4,5,6,7,8,9};
 int b[10]={10,11,12,13,14,15,16,17,19,18};
 p1=max(a,b,&m,&n);
 printf("m=%d,n=%d\n",m,n);
}

1.函數返回值與指向該函數的指針類型必須相同。

2.如果函數不是指針函數(不帶*號),則定義指向該函數的指針後面得帶形參,而且定義該指針時需要加括號,如(*p1),並且賦值時不帶形參。(下述方法指針指向的函數不帶*號)

 int (*p1)(int[],int[],int*,int*);
 p1=max;
 (*p1)(a,b,&m,&n);

 

 

 

 

 

發佈了24 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章