男生十大好就業(yè)專業(yè)seo是什么意思知乎
1.數(shù)組指針概念和應(yīng)用
首先數(shù)組指針應(yīng)該是一個數(shù)組,它的定義如下:
數(shù)組指針,指的是數(shù)組名的指針,即數(shù)組首元素地址的指針。即是指向數(shù)組的指針。例:int (*p)[10]; p即為指向數(shù)組的指針,又稱數(shù)組指針。
數(shù)組指針一般應(yīng)用在二維數(shù)組上面
數(shù)組指針應(yīng)用編程示例:
#include <stdio.h>int main()
{int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};int i,j;int (*p)[4];p = arr;for(i=0;i<3;i++){for(j=0;j<4;j++){//p為二維數(shù)組首地址,*(p+i)為存放二維數(shù)組首地址,(*(p+i)+j)為 //存放一維數(shù)組首地址,*(*(p+i)+j)為取地址中的值printf("%d\n",*(*(p+i)+j));}}return 0;
}
2.函數(shù)指針概念和應(yīng)用
如果在程序中定義了一個函數(shù),在編譯時,編譯系統(tǒng)為函數(shù)代碼分配一段存儲空間,這段存儲空間的起始地址(又稱入口地址)稱為這個函數(shù)的指針。
強(qiáng)調(diào):函數(shù)名跟數(shù)組名都是地址
函數(shù)指針應(yīng)用編程示例:
#include <stdio.h>void input(int *p1,int *p2)
{printf("please input row/column\n");scanf("%d%d",p1,p2);printf("input success\n");
}int getdata(int (*p)[4],int row,int column)
{int data;data = *(*(p+row)+column);return data;
}int main()
{int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};int row,column;int (*p)[4];int data;p = arr;input(&row,&column);data = getdata(arr,row,column);printf("%drow %dcolumn data = %d\n",row+1,column+1,data);return 0;
}
函數(shù)指針與數(shù)組指針應(yīng)用編程示例:
#include <stdio.h>void input(int *p1,int *p2)
{printf("please input row/column\n");scanf("%d%d",p1,p2);printf("input success\n");
}int getdata(int (*p)[4],int row,int column)
{int data;data = *(*(p+row)+column);return data;
}int main()
{int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};int row,column;int (*p)[4];int data;p = arr;void (*pa)(int *p1,int *p2);int (*pb)(int (*)[4],int row,int column);pa = input;pb = getdata;(*pa)(&row,&column);data = (*pb)(arr,row,column);printf("%drow %dcolumn data = %d\n",row+1,column+1,data);return 0;
}
#include <stdio.h>int getmax(int a,int b)
{return a>b ? a:b;
}
int getmin(int a,int b)
{return a<b ? a:b;
}
int getsum(int a,int b)
{return a+b;
}
int getdata(int a,int b,int (*p)(int ,int ))
{int data;data = (*p)(a,b);return data;
}int main()
{int a = 10;int b = 20;int cmd;int ret;int (*p)(int ,int );printf("please input 1 getmax/2 getmin/3 getsum\n");scanf("%d",&cmd);switch(cmd){case 1:p = getmax;break;case 2:p = getmin;break;case 3:p = getsum;break;}ret = getdata(a,b,p);printf("end is %d\n",ret);return 0;
}
3.指針數(shù)組
一個數(shù)組,若其元素均為指針類型數(shù)據(jù),稱為指針數(shù)組,也就是說,指針數(shù)組中的每一個元素都存放一個地址,相當(dāng)于一個指針變量。下面定義一個指針數(shù)組:
int *p[4];
由于[ ]比*優(yōu)先級高,因此p先與[4]結(jié)合,形成p[4]形式這顯然是數(shù)組形式表示p數(shù)組有4個元素。然后再與p前面的“* ”結(jié)合,“*”表示此數(shù)組是指針類型的,每個數(shù)組元素(相當(dāng)于一個指針變量)都可指向一個整型變量。
注意不要寫成
int(*p)[4];
//這是指向一維數(shù)組的指針變量,是上面講到過的函數(shù)指針
定義一維指針數(shù)組的一般形式為
類型名*數(shù)組名[數(shù)組長度];
類型名中應(yīng)包括符號“*”,如“int*”表示是指向整型數(shù)據(jù)的指針類型
指針數(shù)組應(yīng)用編程示例:
#include <stdio.h>int main()
{int a = 1;int b = 2;int c = 3;int d = 4;int* p[4] = {&a,&b,&c,&d};int i;for(i=0;i<4;i++){printf("the num is = %d\n",*p[i]);}return 0;
}
4.函數(shù)指針數(shù)組
函數(shù)指針數(shù)組,顧名思義跟上述函數(shù)指針一樣,只不過是函數(shù)指針 與 指針數(shù)組 相結(jié)合
函數(shù)指針數(shù)組應(yīng)用編程示例:
#include <stdio.h>int getmax(int a,int b)
{return a>b ? a:b;
}
int getmin(int a,int b)
{return a<b ? a:b;
}
int getsum(int a,int b)
{return a+b;
}int main()
{int a = 10;int b = 20;int i;int ret;int (*p[3])(int ,int ) = {getmax,getmin,getsum};for(i=0;i<3;i++){ret = (*p[i])(a,b);printf("ret = %d\n",ret);}return 0;
}
5.指針函數(shù)
一個函數(shù)可以返回一個整型值、字符值、實(shí)型值等,也可以返回指針型的數(shù)據(jù),即地址。其概念與以前類似,只是返回的值的類型是指針類型而已
例如“int *a(int x,inty);”,a是函數(shù)名調(diào)用它以后能得到一個int*型(指向整型數(shù)據(jù))的指針,即整型數(shù)據(jù)的地址。x和y是函數(shù)a的形參為整型。
請注意在 * a 兩側(cè)沒有括號,在 a 的兩側(cè)分別為* 運(yùn)算符和()運(yùn)算符。而()優(yōu)先級高于*,因此a先與()結(jié)合,顯然這是函數(shù)形式。這個函數(shù)前面有一個 *表示此函數(shù)是指針型函數(shù)(函數(shù)值是指針)。最前面的 int 表示返回的指針指向整型變量。
#include <stdio.h>int* getscore(int a,int (*arr)[4])
{int *p;p = (int*)(a+arr);return p;
}int main()
{int score[3][4] = {{1,2,3,4},{5,6,7,8},{1,3,5,7}};int a;int i;int *p;printf("please input 0/1/2\n");scanf("%d",&a);p = getscore(a,score);for(i=0;i<4;i++){printf("score is = %d\n",*p++);}return 0;
}