No.102742 作者:edu118gct 邮件:754634522@qq.com ID:149414 登陆:8次 文章数:39篇 最后登陆IP:202.101.230.141 最后登陆:2014/12/11 11:38:07 注册:2014/3/26 10:04:47 财富:303 发帖时间:2014/12/5 16:15:26 发贴者IP:125.88.253.38 标题:edu118gct:如何学好C语言-指针 摘要:No.102742如何学好C语言-指针 复习运算符 (关系运算与逻辑运算) #include "stdio.h" void main() { int a=1,b=2,m=0,n=0,k;printf("%d\n",m); k=(n=b> a)||(m=a <b); printf("%d\n",m); printf("%d,%d\n",k,m); } (条件运算,与逗号运算) #include "stdio.h" void main() { char a=1,b=3,c=0; printf("%d",(a+b> a-b?a++:++b,++a,b+5)); }//%d 整形输出 %c 字符 %s 字符串 %f 浮点 复习函数(带形参的返回函数值可以做判断语句的条件) #include “stdio.h” char delay(char t); char delay(char t) //t=3 { t++; //t=4 return t; } void main() { char i=8,k; if(i> delay(2)) { k=delay(3); //k=4 i++; //i=9 printf("k=%d,i=%d",k,i); } } 复习全局变量做形参其值不变 #include "stdio.h" void delay(int y); int y=3; void delay(int y) //y=5 { for(;y <6;y++); printf("y1=%d\n",y); //y=6 } void main() { int mm; delay(5); printf("y2=%d\n",y); //y=3 mm=y++; //mn=3,y=4 printf("y3=%d\n",y); 指针数组(里面存放的是指针,如果是字符串则存放的是字符串的首地址) #include "stdio.h" void main() { char i=0,*p[3]={"wejlj","dsag","dsfads"} ; for(;i <3;i++) { printf("%c \n",*(p[i])); } } #include "stdio.h" main(){ int a[3][3]={1,2,3,4,5,6,7,8,9}; int *pa[3]={a[0],a[1],a[2]}; int *p=a[0]; int i; for(i=0;i <3;i++) printf("%d,%d,%d\n",a[i][2-i],*a[i],*(*(a+i)+i)); for(i=0;i <3;i++) printf("%d,%d,%d\n",*pa[i],p[i],*(p+i)); } 指针函数与函数指针的区别 1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(类型 参数表) int *f(int x,int y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。 表示: float *fun(); float *p; p = fun(a); 注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。 来讲详细一些吧!请看下面 指针函数: 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。 格式: 类型说明符 * 函数名(参数) 当然了,由于返回的是一个地址,所以类型说明符一般都是int。 例如:int *GetDate(void); int * aaa(int,int); 函数返回的是一个地址值,经常使用在返回数组的某一元素地址上。 #include "stdio.h" int * GetDate(int wk,int dy); main() { int wk,dy; do { printf("Enter week(1-5)day(1-7)\n"); scanf("%d%d",&wk,&dy); } while(wk <1||wk> 5||dy <1||dy> 7); // wk=2;dy=3 printf("%d\n",*GetDate(wk,dy)); } int * GetDate(int wk,int dy) { static int calendar[5][7]= { {1,2,3,4,5,6,7}, {8,9,10,11,12,13,14}, {15,16,17,18,19,20,21}, {22,23,24,25,26,27,28}, {29,30,31,-1} }; //不释放空间 return &calendar[wk-1][dy-1]; //1,2 } 程序应该是很好理解的,子函数返回的是数组某元素的地址。输出的是这个地址里的值。 #include "stdio.h" main(){ int i; char *day_name(int n); printf("input Day No:\n"); scanf("%d",&i); if(i <0) exit(1); printf("Day No:%2d--> %s\n",i,day_name(i)); } char *day_name(int n){ static char *name[]={ "Illegal day", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; return((n <1||n> 7) ? name[0] : name[n]); } 2、函数指针是指向函数的指针变量,即本质是一个指针变量。 类型说明符 (*函数名)(参数) int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下: 类型说明符 (*函数名)(参数) 其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明必须和它 ......
>>返回讨论的主题
|