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);   //字符串aascsa
strncpy: char *strncpy(char *dest,const char *src);复制第二个字符串的前n个字符到第一个字符串前面n位11     char a[]="asdad";12     char b[]="kjhkj";13     strncpy(a,b,2);14         printf("%s",a);kjdad
strcmp: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";12     char b[]="kjakj";13     char *c;14     c=strstr(a,b);15         printf("%s",c);
返回值:(null)char a[]="asdadkjlkj";12     char b[]="kjlkj";13     char *c;14     c=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 二维数组排序.c
hqyj@ubuntu:~/4.6$ ./a.out 
78 76 56  
34 23 12


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部