导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[edu118gct]如何学好C语言-指针



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 */ 

指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:
类型说明符 (*函数名)(参数)
其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明必须和它 ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:31毫秒 最大:2281毫秒 查询8次