数组,指针,字符串一些基本了解

来源:互联网 发布:iti亲水性种植体 知乎 编辑:程序博客网 时间:2024/05/24 03:24

一、数组

   1、数组:一组具有相同数据类型的数据的有序的集合

   2、数组元素:构成数组的数据。数组中的每一个数组元素具有相同的名称,不同的下标,可以作为单个变量使用,所以也称为下标变量。

   3一维数组的定义

     类型说明:指的是数据元素的类型,可以是基本数据类型,也可以是构造数据类型。类型说明确定了每个数据占用的内存字节数

  4初始化格式:数据类型  数组名[常量表达式]{初值表}

  5、二维数组的定义:

    数据类型 数组名[常量表达式][常量表达式]

    二维数组可被看作是一种特殊的一维数组:它的元素又是一个一维数组

  6

   数组的基本定义方法:

  

               数组类型  数组名[常量表达式*]

               * 不能是变量

               * 必须有确定的值

               数组类型:基本数据类型 

  

               数组的下标:从0开始----数组长度-1;    10 :0~9

  7 数组的初始化方法

   

               1)直接赋值:int arr[10]={1,2,3,4...19}

                                       ={1,23,4}  没赋值部分是随机的

                            int arr[]={1,2,3}

                  字符数组定义:

                            char arr2[]={'h','e','l','l','o'};  //长度 

                      

                                arr2[]="hello";    

                                arr2[1] = 'a';  

               2) 先定义,后赋值

  

                   int a[10];

                       a[0]=1,a[1]=2;.....a[9]=10;

    8 数组的访问方法:

              数组名[下标]   进行数组访问

              数组名[下标1][下标2]

              对于多维数组进行初始化和访问,需要用的循环

  二、字符串

   字符串就是一串字符组成,在内存中连续存储

   是使用char类型的数组进行存储,定义方法见数组定义

   ‘\0’和 0的区别 

   ‘\0’是ASCII 码为0的字符 NUL  空操作 不能被显示出来

     0  ASCII 码为48的字符

   字符串的输入\输出

   字符串输入:

    

      scanf("%s",字符数组名)      不能接受空格

      scanf("%s%s%s...",字符数组名1,字符数组名2...) 可以以空格为分隔

      分别保存到不同数组中

      通过gets()实现接受键盘输入 ,格式:gets(字符数组名);

      sscanf(源字符串,格式控制,变量)  sscanf("127.0.0.1","%d.%d.%d.%d",&a,&b,&c,&d)

                                                                       127 0  0  1

   字符串的输出:

      1printf("%s",字符数组名)

  

      2puts(字符数组名); 全部输出字符数组的内容,遇到'\0'结束

   字符串的函数:

  

      1)求字符串的长度 :strlen   如:strlen(字符数组名)

      2memset(字符数组名,要替换的内容,要替换的个数)

                根据要替换掉的个数,用要替换的内容,替换字符串数组的前 要替换的个数

                memset(arr,'\0',10)  arr数组的前10个元素用'\0'替换 等于清空

      

      3strcpy(字符数组名1,字符数组名2)

  

                把字符数组名2拷贝到字符数组名1中   strcpy(arr1,arr2)

                                                  strcpy(arr1,"1234")

      4)strncpy(目标数组,源数组,个数将指定个数的字符串拷贝指定的数组中

                  

                 // 只复制”12345”的前两个字符给str字符串

                    

strncpy( str, 12345,2 ) ;

      5)strcat(字符数组名1,字符数组名2)字符串的连接

               将字符数组2  连接到字符数组1的后面,并且覆盖'\0'

               

三、头文件定义

定义头文件(xxx.h)的步骤:

 1、定义源文件    xxx.c 任何一个头文件都对应一个源文件,并且头文件的名称和

源文件名称一致

  

    源文件一般就是封装自定义的函数

 

 2、头文件(xxx.h

    进行条件编译 (待续...

    1)函数的声明

    2)宏定义

    3)常变量声明

四、指针

        指针的基本概念:

   内存是怎么存数数据的?

   内存被划分为若干个内存单元(1字节)

       怎么利用这若干个内存单元呢?   

   

       给内存单元进行编号,好处方便查找,根据编号存储数据。

   

       某个内存单元的编号,也可以称之为 地址。

 

   指针就是地址

   1)指向某一个变量的指针     :     指向某一个变量的首地址

   

////////////////////////////////////////////////////

  什么是指针变量?

        用于存放某一个地址的变量

  

  指针变量如何定义?

        指向的类型  *变量名 =NULL;如果不赋值初值,有可能导致无法预知的错误

                            = 0 ; 

                 int *p=NULL; 或者 p=0;

  取出指针变量存储的地址?

        printf("%x",p);

  取出指针变量指向的“值”(该指针变量指向的内存中存储的值)

    

        printf("%d",*p);    

  

  指针变量如何赋值:

        将某个变量的首地址赋值同类型的指针变量

        int *p,i=3;   想达到 p-->i;

          p = &i;

        注意:一定要类型相同,某个类型的指针只能指向同类型的变量

 

              指针赋值的时候,一定给一个地址,不能给数值(p=200错误)

  空指针?

       可以指向任何数据类型的变量

  

       定义: void *指针变量名   

       使用: 要根据指向的变量的类型,进行强制类型转换

              void *p1;  float m=3.4;

               p1 = &m;   //p1指向的是float类型

               获取p1指向的值:    *((float *)p1)

  指针的运算:指针只有减法运算?

              两个指针进行减法运算:假设p1,p2两个指针

              (p2-p1)/sizeof(指针指向类型)

              比较?

原创粉丝点击