




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第七章指針
1.指針與數組的關系2.指針與函數的關系§1.指針及定義一.
指針變量的定義指針變量:存放對象地址的變量.指針變量定義的基本形式:類型說明符*變量名;例:int*pi,*pj;/*pi,pj指向整型變量的指針變量*/float*p3;/*p3是指向浮點型變量的指針變量*/注:1.定義指針變量的物理意義:機器給指針變量分配內存單元,此單元只能存放對象的地址1華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第1頁!2.指針類型是指針所指對象的類型(指針本身沒有類型)例:int*fpi(),*a[10],(*pa)[10];/*復雜變量的指針*/fpi是一個整型指針函數(函數返回值是指向int變量的指針)a是含有10個元素的整型指針數組(每個元素是一個指向int變量的指針)pa是指向含有10個int元素的數組的指針
2華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第2頁!二.
指針變量的運算符指針變量運算符
*:間接取對象的內容&:取操作對象的地址(都是一目運算符)例:int*p,*p1,t,t1;……p=&t;/*使p指向t*//*等價于p=&t;p1=p*/p1=&t;/*使p1指向t*/t=4;……
t1=*p+3;/*間接取p指的對象內容+3=>t1,即t1=7,等價于t1=t+3*/*p=0;/*將0送p指向的t單元中,即t=0*/……3華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第3頁!2).*與&是互逆的運算符charc,*pc;……pc=&c;*(&c)=’a’;/*間接尋址pc*/*pc=’a’;/*間接尋址.訪問c*/c=’a’;/*直接尋址,訪問c*/
4華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第4頁!4)兩種特殊指針:void指針和NULL指針void指針:指向空值類型的指針變量:可以與任何類型指針變量相互賦值(不需要強制類型轉換)如:int*p;void*p1;……p=p1;p1=p;
NULL指針:具有整數0值的指針:即不指向任何對象的指針NULL符號常量:在<stdio.h>有定義:或用#defineNULL0定義void*f();/*f是無參數的指針函數*/void*pa[]={&x1,&x2,&x3,&x4};
5華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第5頁!
2.
算術運算僅限于加法和減法
1)指針變量加(減)一個整數.int*p,*p1;……p++;/*訪問p后,p從當前位置向后移一個單元的數據*/p--;/*訪問p后,p從當前位置向前移一個單元的數據*/--p;/*訪問p前,p從當前位置向前移一個單元的數據*/p+5;/*指向p當前所指數據后面第5個單元的數據.2).同類型指針變量之間僅只能相減,結果為整數,(不為指針,大小為相隔的字節(jié)數)如:上面p-p1;注:不允許兩指針變量相加,乘除,移位,屏敝運算,以及float或double數與指針相加運算6華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第6頁!§2.指針與數組指針與數組有密切關系:任何由數組下標完成的操作,都可由指針實現.一.一維數組的指針表示例:inta[10],*pa;……pa=&a[0];pa=a;(或pa=a+0)指針指向數組的首址
規(guī)定:pa+1指向a+1&a[1]第1個元素pa+2指向a+2&a[2]第2個元素…………pa+i指向a+i&a[i]第i個元素故:*(pa+i)或*(a+i)就是a[i]的內容7華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第7頁!1).下標法:main(){inti,min,max,a[10];for(i=0;i<10;i++)scanf(“%d”,&a[i]);min=max=a[0];for(i=1;i<10;i++)if(a[i]>max)max=a[i];elseif(a[i]<min)min=a[i];printf(“max=%d,min=%d\n”,max,min);}例:求整型數組a[10]中的最大值和最小值
8華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第8頁!3)用指針間接訪問main(){int*p,min,max,a[10];p=a;for(;p<(a+10);p++)scanf(“%d”,p);min=max=*a;for(p=a+1;p<a+10;p++)if(*p>max)max=*p;elseif(*p<min)min=*p;printf(“max=%d,min=%d\n”,max,min);}9華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第9頁!例:lenth(s)/*計算s的長度*/chars[];{intn;for(n=0;s[n]!=’\0’;n++);return(n);}
lenth(s)char*s;{intn;for(n=0;*s++!=’\0’;n++);return(n);}#include<string.h>main(){staticchars1[]=”abcdef”;/*等價于char*s1=“abcded”;*/intstring;string=lenth(s1);/*等價于string=lenth(&s1[0]);*/printf(“%d\n”,string);}10華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第10頁!二.指針與多維數組
1.
二維數組元素的表示例:inta[2][3]={{1,2,3},{4,5,6}};
1)下標表示:元素的地址表示:&a[i][j](取地址)元素的內容表示:a[i][j]2)元素的數組名表示例:inta[2][3]={{1,2,3},{4,5,6}};數組名a被看成由元素a[0],a[i]的一維數組,但a[0]又可看成包含3個元素a[0][0],a[0][1],a[0][2],一維數組a[1]又可看成包含3個元素a[1][0],a[1][1],a[1][2],一維數組即:11華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第11頁!例:編程用指針變量輸出數組元素的值.main(){inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};int*p;for(p=a[0];p<a[0]+12;p++){if((p-a[0])%4==0)printf(“\n”);/*一行輸出4個數據*/printf(“%5d”,*p)}}12華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第12頁!
2.
多維數組的指針表示三維及以上的數組用指針表示比較復雜,一般采用下標表示元素法比較好;3.指向二維數組的指針變量的使用1)指針變量指向二維數組的某個元素
定義時:*指針變量=&數組名[下標1][下標2]引用時:指針變量=&數組名[下標1][下標2]例:輸入2行3列的矩陣中的元素,存入二維數組,再按行列輸出.main(){inta[2][3],*p;inti,j;for(i=0;i<2;i++)for(j=0;j<3;j++){p=&a[i][j];scanf(“%d”,p);}inta[2][3],*p=a;(或*p=&a[0][0])…….for(i=0;i<2;i++)for(j=0;j<3;j++){scanf(“%d”,p);p++;}13華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第13頁!
定義時:(*指針變量)[m]=二維數組名(m為列長)
引用時:指針變量=二維數組名數組元素的地址引用:*(指針變量+行下標)+列下標數組元素的內容引用:*(*(指針變量+行下標)+列下標)例:上例:
main(){inta[2][3],(*p)[3]=a;inti,j;for(I=0;i<2;i++)for(j=0;j<3;j++)scanf(“%d”,*(p+i)+j);或:*(a+i)+j;
for(i=0;i<2;i++){printf(“\n”)for(j=0;j<3;j++)printf(“%5d”,*(*(p+i)+j));或:*(*(a+i)+j);}}
14華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第14頁!例:輸入一個表示月份的整數,輸出該月份的名字
main(){intn;char*month[]={“Illegalmonth“,“Jan.”,“Feb.”,“March”,“April”,”May”,”June”,”July”,“Aug.”,”Sep.”,“Oct.”,”Nov.”,”Dec.”};printf(“Inputnumberofmonth:\n:“);scanf(“%d”,&n);if(n>=1&&n<=12)printf(“%s\n”,month[n]);elseprintf(“%s\n”,month[0]);}15華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第15頁!參數argc,argv的定義:main(argc,argv)intargc;char*argv[];/*或char**argv;){…….}注:1.argc和argv位置不能顛倒2.argc和argv的初始化,由鍵入的命令(包括命令字)的個數決定.
16華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第16頁!四:指向指針的指針變量定義形式:類型標識符**標識符例:char**p;相當于*(*p)其中:*p是指針變量的說明,它說明了一個指向字符型數據的指針變量
前*()星號表示指針變量p是指向一個字符型指針變量的指針變量(指針變量的嵌套定義)注:訪問內容時,需要二次間址操作:用**p表示:*p是間接指向對象的地址,而**p是p間接指向的對象的值.
17華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第17頁!
§3.指針與函數
一.
指針變量作為函數參數1.指針變量作為函數形參可改變對應實參的值(傳地址)如:main(){inta=5;i=3,out;out=changer(&i)*i;printf(“%d%d\n”,i,out);}changer(int*index){intre;*index=7;re=5*(*index);return(re);}注:除數組名外,任何以地址傳遞的實參變量必須在變量名前加上&符號,表示傳地址,在被調用函數中形參要說明為指針18華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第18頁!2.指針作形參,對應實參的形式voidsort(int*v,intn)/*v[]和*v都是數組指針變量*/{…...}調用函數{inta[10],*p;p=&a[0];sort(p,10);…….}調用形式實現sort(a,5)a[0],a[1],a[2],a[3],a[4]排序sort(a+3,8)a[3]~a[1]排序sort(&a[4],10)a[4]~a[9]排序19華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第19頁!3)形參說明為指向下一級數組的指針,實參為下一組數組的指針,或指向下一級數組的指針變量.如:voidf(int(*pa)[3],intsize){…..}調用函數:{inta[2][3];……f(a,2);……}或{inta[2][3],(*p)[3];……p=a;f(p,2);……}
C語言中:函數不能返回數組,函數,結構,聯合類型的值,
但可以用返回指向此類數據的指針的方法實現.20華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第20頁!例:求a,b中的最小數的程序.1.一般函數調用main(){inta,b,c;scanf(“%d%d”,&a,&b);c=min(a,b);printf(“min=%d\n”,c);}min(intx,inty){intz;if(x<y)z=x;elsez=y;return(z);}2.用函數指針調用main(){inta,b,c;int(*p)();scanf(“%d%d”,&a,&b);p=min;c=(*p)(a,b);/*不能寫成p=min(a,b);*/printf(“min=%d\”,c);}注:函數指針作為函數,函數名作為形參,實現將函數名作為參數傳給其他函數的目的
21華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第21頁!通過函數指針將函數名作為參數傳給其他函數,便能創(chuàng)造出功能很強的高級函數系統,,在大型c程序設計中很有作用定義另一個函數all如下
voidall(intx,inty,func)int(*func)();/*函數名傳遞*/{intz;z=(*func)(x,y);printf(“%d\n”,z);}main(){inta,b;scanf(“%d%d”,&a,&b);all(a,b,max);all(a,b,min);all(a,b,mean);}22華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第22頁!
main(){chars1[80],s2[80];scanf(“%s”,s1);scanf(“%s”,s2);printf(“%s\n”,cat(s1,s2));}23華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第23頁!練習題將下列函數的數組參數,改寫成指針參數,且使函數的功能不變floatav(a,n)floata[];intn;{inti;floats;for(i=0,s=0;i<n;i++)s=s+a[i];return(s/n);}24華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第24頁!2)chars[]=”ABCD”;main(){char*p;for(p=s;p<s+4;p++)printf(“%s”\n”,p);}
3.
編程:輸入10個整數存入一維數組中,統計其中既能被3整除又能被8整除的數的個數(用組數和指針兩種方式做)同時顯示這些數在該數組中的下標值4.
編程:輸入一個字符串,間隔顯示其中的字符.(用指針和數組兩種方法做)如:abcdef顯示:ace25華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第25頁!例:inti,j,*p;1)
i=123;2)
p=&i;3)
j=*p;但:p=i;或p=j;p=123都是錯誤的,不能將常量或變量的內容值送指針變量.注:1)&變量名:包括基本類型的變量,數組元素,結構變量或結構的成員.不能作用于數組名.,常量,非左值表達式或寄存器變量.例:doubler,a[20];inti;registerintk;表達式:&r,&a[0],&a[1]是正確的,
&(2*r),&a,&k是非法的.
26華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第26頁!三.指針運算1.
賦值運算1).同類型的指針變量可以相互賦值,(指向同一類型的對象)int*p1,*p2,a;p1=&a;p2=p1;*p1=5;2).常數0(NULL)可以賦給任何類型的指針變量p1=0;p2=0;3).不同類型的指針變量之間賦值必須采用類型強制符來轉換(不能自動類型轉換,void指針除外)如:int*pi;charbuf[100],*bufp=buf;/*數組名作為地址常數賦給指針變量bufp*/pi=(int*)bufp;27華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第27頁!例:main(){int*p1,*p2,*p,a,b;scanf(“%d%d”,&a,&b);p1=&a;p2=&b;if(a<b)/*交換兩個指針變量的值*/{p=p1;p1=p2;p2=p;}printf(“a=%d,b=%d\n”,a,b);printf(“max=%d,min=%d\n”,*p1,*p2);}28華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第28頁!例:用指針定義求字符串長度的函數intstrlen(char*s){char*p=s;while(*p!=’\0’)p++;return(p-s);}3.
關系運算兩個指針指的類型相同,可以進行比較(>,<,>=,<=,==,!=)例:p>q若值為非0,則p所指的數據位于q所指的數據之前,反之為0指針變量不能與常量比較,但常量0(NULL)可與任何類型的指針變量作==或!=的比較29華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第29頁!注:1)當指針變量指向數組首址后,以下標為i的數組元素引用的方法有3種*(指針變量+i),*(數組名+i),數組名[i]
指針法
數組元素法
2)數組名與指針之間有區(qū)別:
指針是變量;數組名是地址常量如:pa=a;pa++;是有意義的操作a=pa;a++;pa=&a;a=a+1;都是非法的.訪問一個數組元素:可用下標法:a[i],也可用指針法:*(p+i)或*(a+i)30華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第30頁!2)用數組名訪問元素main(){inti,min,max,a[10];for(i=0;i<10;i++)scanf(“%d”,a+i);min=max=*a;for(i=1;i<10;i++)if(*(a+i)>max)max=*(a+i);elseif(*(a+i)<min)min=*(a+i);printf(“max=%d,min=%d\n”,max,min);}31華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第31頁!注:1.指針變量的定義和沒有指明長度的數組視為一樣例:在函數定義中;參數說明:f(chars[])
f(char*s){{}}2.在C語言中,只要出現未加下標的數組名,字符串常量名,結構名,聯合名或不帶參數的函數名,都可以解釋成指針.因此可同指針變量一樣置初值3.指針與字符串(字符數組)如:chars[]=“It’sastring”;char*s=”It’sastring”;但有區(qū)別:如:char*p;/*指向一個字符的指針變量*/p=“It’sastring”/*指向字符串的串首址*/scanf(“%s”,p);/*錯誤,沒有為p所指的對象分配空間*/又如:chars[];s=“It’sastring”;/*錯誤s為地址常量*/32華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第32頁!例:把字符串t復制到字符串s中的函數strcpy(s,t)用指針strcpy(s,t)char*s,*t;{while((*s++=*t++)!=’\0’);}用數組strcpy(chars[],chart[]){inti;for(i=0;(s[i++]=t[i])!=’\0’;);}*(s+i++)=*(t+i)33華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第33頁!根據C語言規(guī)定:數組名代表數組的首地址:因此.a代表二維數組的首址,(即第0行的首址),a+1:代表行的首址同理:a[0]為另一個一維數組的首址(即第0行第0列元素的首址)即:a[0]是&a[0][0];a[0]+1是&a[0][1];a[0]+2是&a[0][2]a[1]為另一個一維數組的首址(即第1行第0列元素的首址)即:a[1]是&a[1][0];a[1]+1是&a[1][1];a[1]+2是&a[1][2]即:a[i][j]元素的地址用數組名表示:a[i][j]或*(a+i)+j與二維數組地址&a[i][j]一樣a[i][j]元素值用數組名表示:有以下幾種等價形式:*(a[i]+j)*(*(a+i)+j)(*(a+i))[j]/*數組名與下標混合表示*/或:*(&a[0][0]+2*i+j)/*注:inta[2][3]*/34華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第34頁!3)指向數組指針變量的定義如:int(*pa)[3],a[2][3];/*指針變量pa指向3個元素的數組*/pa=a;/*使pa指向數組a的第0行;*/注:int(*pa)[3]與int*pa[3]不同,后者為由三個指針組成的指針數組.例:上例:main(){inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};int(*p)[4],j;for(p=a;p<a+3;p++){for(j=0;j<4;j++)printf(“%5d”,*(*p+j));printf(“\n”);}}35華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第35頁!for(i=0;i<2;i++){printf(“\n”)for(j=0;j<3;j++){p=&a[i][j];printf(“%5d”,*p);}}}
2)指針變量指向二維數組的首地址
定義時:*指針變量=二維數組名*指針變量=&三數組名[0][0]引用時:指針變量=二維數組名指針變量=&二數組名[0][0]3)指針變量指向二維數組中的某一個一維數組P=a;(或p=&a[0][0];)for(i=0;i<2;i++){printf(“\n”)for(j=0;j<3;j++){printf(“%5d”,*p);p++;}}}36華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第36頁!三.指針數組和命令行處理由指針變量組成的數組1.指針數組說明的一般形式:
類型標識符*數組名[常量表達式];例:int*a[4];注:1.*a[4]是指針數組而(*p)[4]是指向數組的指針變量2.指針數組主要用于字符串數組的處理和命令行參數的處理因為字符串數組中每一個字符串不等長.37華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第37頁!2.命令行參數的處理命令行帶有任選變元或參數稱為命令行參數.如:c>echohelloworld/*操作系統下的命令行*/發(fā)布命令行的時刻:在操作系統下執(zhí)行時如何將命令的參數接收到程序中?方法是:通過函數main(argc,argv)中argc,argv傳送給程序.其中:argc:計算命令行中參數的個數argv:指針數組:每個元素是指向包含這些參數(字符串)的指針
如:c>echohelloworldargc=3argv[0]=“echo”argv[1]=“hello”argv[2]=“world”38華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第38頁!例:編一命令行執(zhí)行程序:c>echowhatdayistoday?輸出命令行參數:whatdayistaday?
main(argc,argv)intargc;char*argv[];{while(--argc>0)printf(“%s%c”,*++argv,(argc>1)?’‘:’\n’);}編譯echo.c生成echo.exe文件,在dos狀態(tài)下執(zhí)行
c>echowhatdayistoday?顯示:whatdayistoday?它告訴我們:可在操作系統狀態(tài)下,利用程序,接收字符串,然后處理這些串..例如:輸入:c>day22001/*設計程序day.c,接收月份,年份,顯示該月的天數*/39華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第39頁!例:#include<stdio.h>main{inti,a[5],*num[5],**p;printf(“inputinteger5:\n“);for(i=0;i<5;I++){num[i]=&a[i];scanf(“%d”,num[i]);}p=num;for(i=0;i<5;i++)printf(“%5d”,*(*(p+i)));}輸入:integer5:12345輸出:1234540華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第40頁!2.通過指針參數可以從被調用參數中返回多個值例.求10個整數中奇數和偶數的個數
voidcount(intx,intp1,intp2){if(x%2!=0)++*p1;else++*p2;}main(){inti,j,sum1=0,sum2=0;for(i=0;i<=10;++i){scanf(“%d”,&j);count(j,&sum1,&sum2);}printf(“even=%d,odd=%d\n“,sum2,sum1);}41華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第41頁!2)形參說明為指向數組元素的指針,實參為數組元素的地址或指向元素的指針變量.如:voidf(int*p,intsize){…...}調用函數{inta[2][3];…….f(a[0],2*3);/*或&a[0][0]*/..….}42華中科技大學光電子學院C語言第七章共48頁,您現在瀏覽的是第42頁!
二.
指向函數的指針變量(函數指針)定義形式:類型標識符(*指針變量名)();例:int(*p)();/*與數組指針定義類似:char(*p)[]*/
說明:1.p是指向一個函數的指針變量,(指向該函數名代表的入口地址送指針p),此函數返回int類型的值2.用函數指針變量調用函數時,用函
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農業(yè)職業(yè)經理人考試中的跨界思維運用試題及答案
- 糧油加工學考試題及答案
- 高效率備考秘書證試題及答案
- 便捷學習食品安全員考試試題與答案
- 數據驅動的決策支持
- 高效應對多媒體設計師的考試試題及答案
- 園藝師應具備的創(chuàng)新能力試題及答案
- 2024年農業(yè)職業(yè)經理人考試現代農業(yè)科研動態(tài)與試題答案
- 紅樓春夢課件
- 教育創(chuàng)新課件模板:激發(fā)靈感與學習
- 2025年浙江省杭州市拱墅區(qū)中考語文模擬試卷含答案
- 原發(fā)性高血壓護理措施
- 路面工程安全專項施工方案
- 人工智能基礎(Python實現)-課件 第8章 生成式大模型應用
- 語義演變與認知機制-深度研究
- 2024年安徽寧馬投資有限責任公司招聘10人筆試參考題庫附帶答案詳解
- 做新時代的忠誠愛國者課件
- 紀檢監(jiān)察審查調查業(yè)務培訓
- 《變頻器原理及應用》課件
- 2024年中考模擬試卷英語(蘇州卷)
- 攝像服務行業(yè)品牌建設研究-深度研究
評論
0/150
提交評論