C51笔记---指针

通过指针赋值,访问数组元素:

int a[10],*ptr;

ptr=a;

则ptr[n]即数组元素(下标法),等效于*(ptr+n),n为0--9;(不要这么用)

*ptr++:当前变量的值是*ptr,然后指针增加一个变量所占的字节数,下次*ptr是新的变量值。

*(a+n):数组名也能作指针方式使用。(不要这么用)

访问二维数组时:

int a[n][m],*ptr;//声明了一个整型二维数组,和一个整型变量的指针。

ptr=a[0];//a[n]代表数组第n行首地址。

则*ptr++依次代表数组元素,先从a[0][0]到a[0][m-1]代表第一行所有元素,然后第二行从a[1][0]开始,直到结束。

int a[3][4];

int (*ptr)[4];代表二维数组,ptr指向每行首地址,例如a[n]。

ptr=a;//a与a[0]等效,二维数组首地址

则*(*(ptr+1)+2)代表a[1][2]元素。//*(ptr+1)是下一行元素的首地址,*(ptr+1)+2是该行第2列地址(从0列算起)

===================================

通过指针赋值,在一个函数中调用另一个函数:

void result(int (*p)(),int a,int b);//声明一个函数,其形参含有一个函数指针。随后在result函数编写中,使用(*p)(a,b)来调用指针函数,该函数与add函数形参格式一致。

int (*pf)();//声明一个指向函数的指针,该函数返回值是int型

pf=add;//该指针指向加法函数,加法函数在随后编写,其形参格式为int add(int a,int b)。

result(pf,i,j);//调用加法函数,来实现result函数。

===================================

通过指针,来访问另一个函数的处理结果:(该函数调用完毕后,只返回一个地址,即指针)

char *substr(char *dest,char *src,int begin,int len)

{......

return dest;   

}

定义了一个函数,返回值是指针,该指针指向char型变量。substr函数中调用memmove库函数处理src字符串,给dest串赋值。

main函数中,处理如下:

char *dest;//声明一个字符变量指针,用于存放字符处理结果的首地址。

char src[]="C Programming Language";

后续使用printf("%s\n",substr(dest,src,15,4));来打印dest字符串。//把src字符串处理到以dest为首地址的空间中,然后打印。

但dest字符串一定要事先申请分配空间,例如用malloc函数,否则指针赋值不稳定。因为不知道substr函数要在dest指针后面生成多少字符串。

=========================================

指针数组,即声明了一堆指针:

int *ptr[5];代表指针数组,每个ptr[n]可以指向int型变量或int型数组首地址。例如*ptr[3]代表某个int型变量。

指向指针的指针:int **ptr;最终指向int型变量的指针。使用时,一般用*ptr进行操作,代替变量的指针。

=========================================

main函数也可以带形参,如下:

main(int argc,char *argv[])

{....}

其中argc是命令行的参数个数,argv指向各种命令。

main函数不能被调用,而是通过程序保存的文件名来调用。例如test.c文件,test就是exe的文件名和命令名。

各种命令直接通过argv输入到程序内,例如命令:test vfp access "SQL SERVER"(各命令用空格区分,双引号内即使有空格,也视为一个命令)

这里的argc是4,算上test在内。test是命令,其余是参数。

这种main函数需要编译成exe文件,并在dos环境下输入相应命令来执行。

==========================================

C51中的指针定义:

变量类型 存储类型1 *存储类型2 ptr;

其中,存储类型1代表变量所在的存储区;不写时,变量的存储类型由编译模式决定。此时ptr占用3个字节,第一字节为变量所在的存储区类型编码,第2,3字节为高位和低位偏移地址。写了存储类型1,则ptr可能是占用2个字节。ptr占用多少空间不重要,只需调用即可。

存储类型2代表指针所在的存储区,分为data/idata/bdata,xdata,pdata,code四种。不写时,指针在片内数据存储区中,即data区。xdata为片外数据区。

在51编程中声明指针时,最关键是要写明存储类型1,即准备指向哪里的变量。

例如char xdata * ptr;//指向xdata区中的char型变量,指针ptr位于片内存储区。

书中举例仅仅是指向了一个一维数组,并打印。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值