码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员---C基础9【字符串的输入输出】【字符串相关函数】【指针】【指针变量初始】【二级指针】

时间:2015-10-03 23:11:31      阅读:368      评论:0      收藏:0      [点我收藏+]

标签:

 

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

【字符串的输入输出】

 

1、字符串输出:

 

    %s-------从给定的地址开始输出字符直到遇到\0停止;

 

     printf("%s\n",&a[3]);

 

     printf("%s\n",a);

 

    char a[]="hellowo\0rd!";

 

 

 

2、字符串输入:

 

    从键盘上接收一个字符串,保存在以a为首地址的字符数组中

 

 

        scanf("%s",a);

 

        printf("%s\n",a);

 

    如果用%s输入注意空格问题

 

    如果输入的字符串有空格,则空格之后的字符无法被接收,输入遇到空格就结束;

 

    输入的字符串的长度要小于数组的长度,会越界;

 

 

 

3、字符串结束符的使用:

 

    结束符\0;

 

    结束符可以用来判断字符的长度;

 

    没有结束符%s无法停止;

    技术分享

    不当的使用\0;会只打印部分;

 

4、字符串长度的计算方法

    1)int n=sizeof(a);不受\0的影响;

    2)字符串函数计算长度  strlen(str1);

    3)以\0作为条件,进行判断,遇到\0就结束;\0之前的就是字符串的长度;

 

5、字符数组和普通数组的区别:

    没有本质的区别:

    Char[],int[]

    数组名是一个指针地址,一个常量,元素有类型;

 

【字符串相关函数】

 

1、字符串函数:

 

    #include <stdio.h>  标准的输出输入函数头文件

 

    1)puts()输出一个字符串

 

     char a[]="Hello, World!";

 

        puts(a);

 

    自动换行,()里面是一个字符数组地址;

 

 

 

    2)gets()输入一个字符串: gets(b);里面是数组名地址;

 

      warning: this program uses gets(), which is unsafe.

 

      有一个不安全警告,存在越界问题;可以接收空格;尽量不要越界;

 

 

 

    #include <string.h> 字符串函数头文件

 

    3)strcat()连接一个字符串

 

    char a[100]="Hello",b[]=", World!";

 

        strcat(a,b);

 

        puts(a);

 

    把b连接到a的后面;b把a的最后一个字符\0给覆盖了

 

    必须要加头文件,#include <string.h>

 

    把a和b连起来变成新的a,a的长度要足够大,至少要能够保持a+b

 

 

 

4)strcpy;字符串拷贝函数;

 

    strcpy(a, b);把b的字符串拷到a的字符串中;其中a要足够大,可能要越界;

 

 

 

5)stecmp ; 字符串的比较函数;

 

    strcmp(a, b);比较两个字符串的大小;

 

    规则:比较他们的ASCII值,比较在字典中出现的顺序

 

    比较的过程:逐个比较;

 

    返回值:大于0--a>b,小于0---a<b,等于0---a=b;值是两个字符串相差元素的个数;

 

 

 

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

 

    int i=strlen(a);不包含\0,和数组长度无关,和字符元素有关

【指针】

 

1、指针概念:

 

    内存单元的编号也就是地址,根据地址就可以找到所存内容,所有把这个地址称为指针;指针就是一个内存单元编号地址;

 

    内存单元地址就是指针,其中的数据是单元的内容;

 

 

 

2、指针的好处:

 

    1)为函数提供修改变量的灵活手段;

 

    2)让函数有多个返回值;

 

    3)可以改善子程序的效率

 

    4)为动态数据结构提供支持

 

 

 

3、变量的存取方式

 

    1)直接存取  通过变量名获取变量值;

 

    2)间接存取  通过指针(地址)来获取变量值;

 

 

 

4、指针变量:

    存放指针的变量,存放地址的变量;用一个变量存放指针

 

    指针是一个地址,是一个常量;

 

    指针变量是存放一个地址,是一个变量;

    技术分享

  

5、定义指针变量:

    三部分:

      1)指针类型说明,即定义变量为一个指针变量

      2)指针变量名

      3)变量值(指针)

    一般形式:

      类型声明符   *变量名;类型声明是表示指针指向变量的存储的类型

      Int  *a;

6、定义注意事项:

    1)”*“必须有,如果没有就相当于定义了一个普通变量;

    2)指针变量不能用来存放数值和字符,只能放地址;

    3)存放地址的存储数据类型要一致;

    4)与变量相同也有全局和局部之分;

【指针变量初始】

 

1、初始化:

 

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

 

        完全初始化: 

 

        int i=0; 

 

        int *a1=&i,*a2=&i;  a1a2都指向了i;

 

        部分初始化

 

        int *a1=&i,*a2;

 

      2)先定义后初始化:

 

        int i=0;

 

        int *a;

 

        a=&i;

 

      3)如果定义了一个指针,但是不知让指针指向谁

 

        int *a1=null;null是空0;

 

        int *a1=0;什么也不指向;

 

      常见的错误:

 

        int *a1=1000;应该存放地址;

 

        指针的指向可以变;

 

        int *a1=*a2;

 

        如果没有初始化是一个野指针;

 

 

 

2、使用*来获取指针对应的存储区内容:

 

      &:取地址符号;

 

      *:指针运算符号;

 

       int i = 10;

 

          int *a;

 

          a = &i;

 

          int b = *a;

 

      *指针变量,作用:获取指针变量指向的存储内容的内存

      技术分享

      ”*“两种用法:

        1)用于定义一个指针变量:int *a1=&i

        2)获取值int b = *a;

        3)设定指针变量指向存储空间的内容 

           int i=10;

              int *a=&i;

              *a=100;

        如果一个指针变量没有初始化,这个指针变量存放的是一个垃圾数,这个指针变量称为野指针,

      两个数交换:

 1 #include <stdio.h>
 2 
 3 void change(int *p1,int *p2);
 4 
 5 void change(int *p1,int *p2){
 6 
 7     *p1 = *p1^*p2;
 8 
 9     *p2 = *p1^*p2;
10 
11     *p1 = *p1^*p2;
12 
13 }
14 
15 int main(int argc, const char * argv[]) {
16 
17     int a = 10, b = 20;
18 
19     int *p1 = &a, *p2 = &b;
20 
21     change(p1, p2);
22 
23     printf("a=%d\nb=%d\n",*p1,*p2);
24 
25     return 0;
26 
27 }

3、指针的常见运用场景:

    1)在函数中间接访问调用者中的变量:

    2)让函数可以有多个返回值;

      技术分享

【二级指针】

 

1、二级指针:

 

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

 

    int*p=&a;

 

    int**p1=&p;

    技术分享

  技术分享

*一级指针,**二级指针,***三级指针;

 

2、指针区分类型;

同一个编译器下,一个指针所占空间是确定的,在64位系统中占8个字节;

定义什么类型的指针就指向什么类型的变量;

 

 

 

 

 

 

黑马程序员---C基础9【字符串的输入输出】【字符串相关函数】【指针】【指针变量初始】【二级指针】

标签:

原文地址:http://www.cnblogs.com/snowimba/p/4853979.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!