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==16

strstr: 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]);  //67
        printf("p[0][2]=%d\n",p[0][2]);  //67
        printf("*(*(p+0)+2)=%d\n",*(*(p+0)+2)); //67
        printf("a[1][3]=%d\n",a[1][3]); //678
        printf("p[1][3]=%d\n",p[1][3]); //678
        printf("*(*(p+1)+3)=%d\n",*(*(p+1)+3)); //678
        printf("*(*(a+1)+3)=%d\n",*(*(a+1)+3)); //678
        printf("*(p[1]+3)=%d\n",*(p[1]+3)); //678
        printf("*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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤独memories

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值