黑马程序员--IOS基础第十天(C语言)


  1. 字符串的输出和输入:

    %s输出一个字符串

    Printf”%s”,str;

    Prntf(“%s”,&str[0]);

    输入字符串:

    Scanf“%s”str);

    注意:(1)如果以%s格式进行输入的话,注意空格问题。如果输入的字符串有空格,则空格之后的字符无法被接受保存。以%s输入,Scanf遇到空格,就结束了

         2)输入的字符串的长度要小于数组的长度(否则越界,容易出问题)

2.字符串的结束符(“\0”

   不使用或者不当使用结束符造成的问题:

  1. 字符数组初始化时没有使用”\0”,会一直输出知道遇到\0

  2. 如果字符串中间出现\0,则不会打印\0后面的字符

3.字符串的长度:

  1. 使用字符串函数:strlenstr

  2. \0作为条件,进行判断,遇到\0就结束。\0之前就是字符串的长度

4.字符数组和普通数组的区别:没有本质区别

  注意:数组类型指的是数组所包含的元素的类型,而不是数组名的类型,数组名永远是一个指针,指向第一个元素的地址,即数组首地址

  1. 字符数组的每个元素都是char类型,整型数组的每个元素都是int类型。

  2. Scanf()和printf()函数有一种格式化字符串%s可以用来整体输入输出字符数组,但是没有特定的格式支持int 类型整体数组输出

  3. 字符数组,初始化char str[]=“abc”

    整型数组,初始化不能去掉大括号

5.字符串处理函数:

  1)字符串输出函数:puts()

        格式:puts(字符数组名)

        注意:(1puts函数可以自动换行

2)也可是不是数组的首地址,可以是元素的地址

       3)必须是字符数组

          4)不可以格式化输出。Puts(“%s”str);错误

  2)输入:gets()

          格式:gets(数组名);

           注意:(1)使用gets可以接受空格。

                   2)不安全,长度100,输入120也可以输出,存在越界问题

  3)连接一个字符串(需包含string.h):strcat()

               格式:strcatAB 把字符串B连接到A的后面

            注意:(1A的长度要足够大,要能够保存A+B

2BA的最后一个字符\0覆盖了

4字符串拷贝函数strcpy

            格式:strcpyAB)、

             注意:(1)把B拷贝到AB覆盖A

5) 字符串的比较函数:strcmp

             格式:strcmpAB);

 

规则:比较字符的ascii码值,比较在字典中出现的顺治

 比较过程:逐个取两个字符串的字符,对应位相比较,从第一位不相同的位开始,就能确定字符串大小。

函数返回值:>0,A>B;<0,A<B;==0 ,A==B

6)字符串的长度计算函数:strlen

 格式:strlenA);

  注意:结果不包含\0

6.地址:

1)计算机硬件系统的内部存储器中,拥有大量的存储单元(容量为1字节),为了方便管理,必须为每一个存储单元编号,这个编号就是存储单元的地址,每个村吨单元都有一个唯一的地址。

            内存地址内存中存储单元的编号

2)在地址所标识的存储单元中存放数据:

注意:内存单元的地址与内存单元中的数据是两个完全不同的概念

   变量地址系统分配给变量的内存单元的起始地址

7.指针的概念:内存单元的编号也叫做地址。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常把这个地址称为指针。对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。

8.指针变量改良剂定义方法:

1)指针变量:存放指针的变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。

  注意:严格意义上说,指针是一个地址,是一个常量。指针变量存放一个地址,是一个变量。

2)定义指针变量:

对指针变量的定义包括三个内容:

  1. 指针类型说明,即定义变量为一个指针比阿娘

  2. 指针变量名

  3. 变量值(指针)

一般形式为:类型说明符 *变量名

 *表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。例如:int *p//一个指向整型变量的指针。P只能存放一个int类型的变量的地址。

注意事项:

  1. * 必须要有,如果没有,相当于定义了一个普通变量

  2. 指针变量能用来存放数值或者字符之类的么? 不能

  3. 指针变量,归根结底还是变量,也有全局和局部变量之分

  4. 一个类型的指针只能指向同类型的变量,不能指向其他类型的变量。

9.指针变量的初始化和引用:

1)指针变量的初始化方法(应该用地址初始化):

1)定义的同时进行初始化:

    完全初始化:

Int a=5

Int *p=&a//a的地址初始化p这个指针变量。另一种描述方法,p指向a

Int *p2=&a *p1=&a//p1.,p2都指向了a

部分初始化:

Int *p3=&b*p4

P4=&b

2)如果定义了一个指针变量,但是我们不知道让这个指针指向谁

Int *p5=NULL//空指针

Int *p6=0//空,把一个指针赋值一个空,什么也不指

3)先定义后初始化:

Int *p

P=NULL//不推荐这么写

     常见错误:

                 int *p8=1000;//错误

4)注意:多个指针变量可以指向同一个地址;指针的指向是可以改变的;指针没有初始化里面是一个垃圾值,我们称为野指针(可能会导致程序崩溃或访问不该方位的数据)

2)用*来获取指针变量指向的存储单元的内容:

  定义了一个整型变量 *pp是一个指针变量

  *指针变量 作用:获取指针变量指向的内存空间的内容;

获取指针变量所对应的存储单元

Int a=5

Int *p=&a 

Int value=*p//value==5,此处非定义一个指针变量,而是取值

 

总结“*“的两种用法:

  1. 用于定义一个指针变量

  2. 存储指针变量指向的存储空间的内容

Int a=5

Int *p=&a

    *p=100

Int value=*p//vaule==100

 

地址都占8个字节

 

10.指针常见的应用场所:

 1)在函数中可以修改主调函数中的变量

2)让函数有多个返回值

11.二级指针:

1)如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。也成为二级指针“

 

12.定义什么类型的指针就应该指向什么类型的变量:

64位编译器下,任何指针变量都占8个字节。Void *p//空指针

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值