指针基础再续
? ? ? ? ? ?上次談到指針相關基礎,但遇到了一些問題沒有說完,這次再來補充一下,嘿嘿!
通過指針引用字符串:
? 傳入字符數組時:
#include<stdio.h>int print1(char c1[]) {int i=0;while(c1[i]!='\0'){printf("%c",c1[i]);i++;}return 0; }int print2(char c2[]) {for(int i=0;c2[1]!='\0';i++){printf("%c",c2[i]);}return 0; }int main() {char c[20]="i love you";print2(c);return 0; }我用for和while分別打印了字符數組,可以任選其一,打印結果:i love you ??
?
?傳入字符指針時:
?
#include<stdio.h>int print3(char *c3) {for(char *c4=c3;*c4!='\0';c4++){printf("%c",*c4);}return 0; }int main() {char c[20]="i love you";char *c1=c;print3(c1);return 0; }打印結果:i love you
?
?
指向函數的指針:這個指針指向某個函數入口的那個地址,稱函數指針
一般形式:類型名 (*指針變量名)(函數參數表列)
? ? ?
#include<stdio.h>int change(int *a,int *b) {int temp;temp=*a;*a=*b;*b=temp;return 0; }int main() {int a2=4,b2=5,c;int *a1=&a2,*b1=&b2;int (*p)(int *,int *);//聲明指向函數的指針變量p=change;//使其指向函數的入口(*p)(a1,b1);//調用函數printf("a2=%d,b2=%d\n",a2,b2); return 0; }?
返回指針的函數:
?
?
一般形式:類型名 ?*函數名(參數表列)
?
#include<stdio.h>int *printf(int (*p)[3],int n) {int *p1;p1=*(p+n);return (p1); }int main() {int a[2][3]={1,2,3,4,5,6};int (*p2)[3]=a;//定義指向二維輸的指針int *p3;p3=print(a,1);for(int i=0,i<3;i++){printf("%d\n",*p3++);}return 0 } 打印:4 5 6 根據指針函數返回的指針來確定打印哪個一維數組,注意如何定義一個二維數組的指針和指針函數的定義?
?
?
? ? ? ? ??
總結
- 上一篇: linux常用命令,知识在于总结
- 下一篇: 学结构体了