#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);