1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C语言 字符串操作函数 二维数组与指针的对应关系 4.6

C语言 字符串操作函数 二维数组与指针的对应关系 4.6

时间:2019-03-25 04:34:03

相关推荐

C语言 字符串操作函数 二维数组与指针的对应关系 4.6

复习

字符串操作函数

头文件:#include <string.h>strlen:计算出显示的字符的个数,遇到'\0'计算停止。sizeof(a):计算出数组大小,所以多包括一个'\0'。例:char a[]="abncjassd";printf("%d\n",strlen(a)); //9,不计算'\0'printf("%d\n",sizeof(a)); //10,有计算'\0'char a[]="abnc\0jassd";printf("%d\n",strlen(a)); //4,遇到'\0'结束printf("%d\n",sizeof(a)); //11,其中\0算一个字符strcat:char *strcat(char *dest,const char *src);char *: 地址连接两个字符串,将参数src的字符串加到参数dest的字符串的首地址。例:char a[50]="abncjassd";char b[10]="ascsa";strcat(a,b); //abncascsa 从'\0'开始连接strncat:指定第二个字符串连接前n个字符到第一个字符串末尾strcpy: char *strcpy(char *dest,const char *src);复制src字符串到dest例:char a[20]="abncjassd";char b[10]="ascsa";strcpy(a,b); //字符串aascsastrncpy: char *strncpy(char *dest,const char *src);复制第二个字符串的前n个字符到第一个字符串前面n位11char a[]="asdad";12char b[]="kjhkj";13strncpy(a,b,2);14 printf("%s",a);kjdadstrcmp:int strcmp(char *s1,const char *s2);比较s1和s2字符串,从第0位开始比较直到遇到不同字符,比较ASCII码值,返回他们的差值。例:char a[20]="sbncjassd";char b[10]="ascsa";strcmp(a,b); //差值为s-a==18是b数组-a数组 "b-a"strncmp:int strncmp(char *s1,const char *s2);char a[20]="asscjassd";char b[10]="ascsa";strncmp(a,b,4); //差值为s-c==16strstr: char *strstr(char *dest,const char *src);检索src字符串在dest字符串首次出现位置,返回此时的字符串首地址。char a[]="asdad";12char b[]="kjakj";13char *c;14c=strstr(a,b);15 printf("%s",c);返回值:(null)char a[]="asdadkjlkj";12char b[]="kjlkj";13char *c;14c=strstr(a,b);15 printf("%s",c);返回值:kjlkj返回a中第一次出现b的字符串的值指针:指针及地址,内存由多个内存单元组成,每个内存单元又由一个或多个字节组成,每个字节都有一个唯一的编号,这个编号叫做地址。定义:存储类型,数据类型,*指针变量名存储类型:不写默认为自动存储类型:auto数据类型:指针所指向的数据的数据类型指针变量名:存放地址的变量*:1.乘法2.抑制符3.在定义的时候表示变量是一个指针变量4.取地址内容&:1.取地址2.位与运算符例:int a=10;int *p=&a;//定义一个指向int数据的指针p,指向了a的地址指针的大小:和操作系统有关int *p; 8个字节char *p; 8个字节初始化:不能只定义不给明确的指向,如暂时无明确指向将给与0地址空间例:int *p=NULL;char a;char *q=&a;特殊指针:野指针:只定义不初始化,没有赋予明确的指向地址例:int *p;char *q;容易造成非法内存访问,不允许出现野指针空指针:最大的作用防止出现野指针例:int *p=NULL;空指针:空类型指针:使用空类型指针要强制转换例:void *p;(int *)p;//强制转换 整型指针的运算:例:例:int *p;p++; //指针本身指向向后移动一个数据类型p+n; //指针向后偏移n个数据类型大小字节空间注意:+和+=的区别指针间相减得到两个指针之间相差的 数据个数

today

指针和二维数组–数组指针(行指针)

本质:数组的指针,是一个指针,指向数组的指针行指针:指向一行数据的指针定义:存储类型 数据类型 (*指针变量)[列数];数据类型:指向的数据的数据类型(*p)[3]*(*(p+i)+j),第i行第j列的数据==p[i][j]==a[i][j]int a[3][5]={{5,3,67,5,234},{3454,345,2334,678,46},{788,56,89,2,89}};int (*p)[5]=a;printf("%p\n",p);printf("%p\n",p+1);printf("%p\n",a);printf("%p\n",a[1]);printf("a[0][2]=%d\n",a[0][2]); //67printf("p[0][2]=%d\n",p[0][2]); //67printf("*(*(p+0)+2)=%d\n",*(*(p+0)+2)); //67printf("a[1][3]=%d\n",a[1][3]); //678printf("p[1][3]=%d\n",p[1][3]); //678printf("*(*(p+1)+3)=%d\n",*(*(p+1)+3)); //678printf("*(*(a+1)+3)=%d\n",*(*(a+1)+3)); //678printf("*(p[1]+3)=%d\n",*(p[1]+3)); //678printf("*p+2=%p\n",*p+2); //a[0][2]的地址对二维数组的数字进行由高到低的排列:int main(int argc, char *argv[]){int a[2][3]={{23,34,56},{12,78,76}};int (*p)[3]=a;int i,j;for(i=0;i<6;i++){for(j=0;j<6;j++){if(*(*p+j)<(*(*p+j+1))){*(*p+j)^=*(*p+j+1);*(*p+j+1)^=*(*p+j);*(*p+j)^=*(*p+j+1);}}}for(i=0;i<2;i++){for(j=0;j<3;j++){printf("%d ",a[i][j]);}puts(" ");}return 0;} hqyj@ubuntu:~/4.6$ gcc 二维数组排序.chqyj@ubuntu:~/4.6$ ./a.out 78 76 56 34 23 12

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。