c 数组 字符串

在这里插入图片描述在这里插入图片描述

对象具有 地址+类型【数据】
具有名称的对象是变量
& 取地址符
sizeof 读取空间字节数

在这里插入图片描述

普通整型和长整型占4字节

短整型占2字节

十六进制前缀加0x;八进制前缀加0

定点格式用小数点分开;指数格式用E 隔开

输出格式:%f是定点格式,保留小数点后6位,不足6位的用0填充

%g定点格式,去掉小数点后无效0

%E是指数格式

逻辑与和逻辑或运算中,若左元结果能代表整个逻辑表达式的结果,那么右元就不再计算(短路)

 

强制转换格式:(类型标识符)转换对象  ;如 (int)3.14=3; (float)3/4=0.75

选择结构(分支结构):if-else

                                  并列的if 语句(直观,效率低);嵌套if-else(提高执行效率)

                                  switch:每个语句组最后一条一般都是break

循环结构:for ; while-do; do-while  (辅助语句:break; continue)

break是直接跳出循环体,continue是提前结束本轮循环,执行下一轮循环;

函数定义格式:  返回值类型标识符 函数名(形参列表)

                           {

                                   一组语句

                 }

 

自动局部变量(即自变量),作用域:其所属函数;生命周期:是所属函数的一次调用时间;其局限性在于:1.不能累计函数被多次调用的结果(引入静态局部变量);2.它所属的函数,不能被多个函数共享(引入外部变量)。

静态局部变量,在声明前加关键字static,必须初始化。生命周期:从初始化开始,到整个程序结束。

函数形参只能是自动局部变量,不能是静态局部变量。

外部变量,在函数外部定义,生命周期:从编译阶段开始,直到程序结束。作用域:其定义下的所有函数。

函数声明意义:1.解决被调函数必须在主函数之前定义问题;2.代码抽象(隐藏函数的实现细节)

 

求最大公约数:辗转相除法;

判断质数:质数不能被2和这个整数的平方根之间任一整数整除。

 

数组:

sizeof给出整个数组所占据的内容的大小,单位是字节。

数组变量本身不能赋值。要把一个数组所有元素传给另一个元素必须进行遍历。

遍历数组通常使用For循环,让循环变量从0到<数组长度

判断素数:判断是否能被已知的且<x的素数整除

指针

指针的值所表示的地址上的变量  用 * 来表示  是一个单目运算符

int *p=&i;   相当于 int *p;    p=&i;

 

const 在*前面,则表示指针所指的内容不能被修改,即不能通过指针p给i赋值;(只读性指针)

const在*后面,则表示指针不能被修改,即p不能指向其他。

 

sizeof(char)=1; sizeof(int)=4;

 

char ac[ ]={0,1,2};

char *p=ac  相当于  char *p=&ac[0] 相当于 char *p; p=ac; 相当于 char *p; p=&ac[0];

ac 指的是数组的第一个单元地址;ac[0]指的是数组的第一个单元地址中的值;

 

*p++ : ++ 运算符优先级高于 *


malloc 借空间  ; free 还空间   都包含在系统头文件stdlib.h中 

malloc的声名格式为:

void* malloc(unsigned size);

例如:要生成一个长度为5的整型动态数组,则要先申请20个字节的非类型化的空间:

1.void *vp=malloc(20);    //void *vp;   vp=malloc(20);

2.int*p=(int*)vp;              //int*p;  p=(int*)vp;

其中(int*)是强制类型转换运算符:从首字节开始,每4字节为一个整型对象,共5个整型对象,p为第一个对象的指针1.1

将1,2合成:

int*p=(int*)malloc(20);    //int*p; p=(int*)malloc(20);

使代码具有移植性:

int*p=(int*)malloc(5*sizeof(int)); 

 

动态分配两个习惯:

1.没有空间分配则返回NULL

int*p=(int*)malloc(n*sizeof(int));

if(p==NULL){

printf("allocation failure");

exit 1;   //终止程序,该函数在stdlib.h中

}

2.当不需要动态数组空间时,要free撤销该空间

free(指针变量名);    //撤销动态空间

 

 

 


 

char**a:  a是一个指针,指向另一个指针,那个指针指向一个字符(串);

char a [  ][10]:    a[0] --> char [10];

char *a[ ]:    a[0]-->char *

 

int putchar(int c);   向标准输出写一个字符

int getchar(void); 从标准输入读入一个字符

Ctrl+c  强制结束   Windows上  Ctrl+d可返回EOF  Unix上 Ctrl+z

 

1.strlen

    size_t strlen(const char*s)     返回s的字符串长度(不包括结尾的0)

2.strcmp

   int strcmp(const char *s1,const char *s2);

比较两字符串,返回:0(s1==s2);1(s1>s2);  -1(s1<s2);

3.strcpy

  char *strcpy(char *restrict dst, const char *restrict src);  

  把src(源)的字符串拷贝到dst(目的) ;

  src和dst不能重叠;

  返回dst;

复制一个字符串:

         char *dst=(char*)malloc(strlen(src)+1);

         strcpy(dst,src);

4.strcat 连接两个字符串

   安全版本:

                    char *strncpy(char *restrict dst,const char*restrict src,size_t n);

                    char *strncat(char *restrict s1,const char *restrict s2,size_t n);

                    int strncmp(const char *s1,const char *s2,size_t n);

5.strchr 在字符串中找字符

    char *strchr(const char*s,int c);  从左边找出第一c的位置

    char *strrchr(const char*s,int c);从右边找出来第一个c的位置

      返回Null表示没有找到,找到了就返回那个指针所指的字符

6. strstr 字符串中找字符串

  char *strstr(const char *s1,const char *s2);

  char *strcasestr(const char*s1,const char*s2);    忽略大小写

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值