C语言学习之数组及指针

数  组

 数组的分类   
  1.一维数组
   1.整型数组
   2.字符型数组
  2.二位数组
  3.多维数组
 
 1.一维数组
  1.数组的定义方式
   存储类型 数据类型 数组名[元素个数]

  2.数组的存储方式
   数组在内存地址中连续存放

  3.数组的初始化
   1.局部初始化
    int a[5] = {0,1,2};
   2.全部初始化
    int a[5] = {0,1,2,3,4};
   3.默认初始化
    int a[] = {0,1,2,3,4};

 

二维数组
 1.定义方式
  存储类型 数据类型 数组名[行数][列数]
 
 2.二位数组的初始化
  1.全部初始化
   int a[2][3] = {{0,1,2},{1,2,3}};
   int a[2][3] = {0,1,2,3,4,5};

  2.局部初始化
   int a[3][4] = {{1,2},{0,3,4}};
 
  3.默认初始化
   默认初始化允许行数省略,但绝不
   允许列数省略
   int a[][4] = {{0,1,2,3},{1,2,3,4},{2,3,4,5}};
   
 3.内存存储方式
  int a[n][m]
  先存储第一行中所有的元素
  再存储第二行中所有的元素
  再存放第三行中所有的元素
  ...
  再存放第n行中所有的元素

 二维数组可以理解成一个一维数组构成的一维数组
 
 一维数组的使用可以通过for循环的形式来操作
 二维数组的使用可以通过双层for循环的形式来操作

多维数组
 n维数组就是由n-1维数组构成的一个一维数组

字符数组
 1.定义
  存储类型 char 数组名[元素的个数]

  字符数组元素的个数必须能够存放下字符串末尾的
  \0字符

  printf("%s",a);
  %s 按照字符串形式打印
  它会将离数组第一个元素最近的\0中间的字符打印
  在终端
 
 2.初始化
  1.全部初始化
   char a[6] = {'h','e','l','l','o','\0'};
   char a[6] = "hello";

  2.局部初始化
   char a[6] = {'h','e'};

  3.默认初始化
   char a[] = "hello";

   默认初始化a数组中的6个元素

  4.赋值
   操作字符数组必须通过循环来操作
   但是可以通过库文件来直接操作字符数组
   string.h

   strlen 获得字符串的长度
   strcpy 字符串的拷贝
   strcmp 字符串的比较
   strcat 字符串的拼接
 
   3.char *strcpy(char *dest, const char *src);
     功能:  完成字符数组的拷贝
     参数: 
        dest:要拷贝到的数组
        src:要拷贝的数组
     返回值:
         拷贝到的数组名

   4.int strcmp(const char *s1, const char *s2);
     功能:  比较两个字符串
     参数: 
        s1:其中一个字符数组
      s2:另外一个字符数组
     返回值:
        返回0代表两个字符串相等
      返回非0数代表两个字符串不相等


指针
 1.作用
  1.利用指针可以直接操作内存
  2.指针能够使程序更加的简洁、紧凑、高效
 2.地址:内存中用来区别不同字节的一个编号
   指针:地址就是指针,指针就是地址
   指针变量:用来保存指针的变量

 3.指针的定义
  int *p;  p变量中的指针指向一个int类型的数据
  char *p; p变量中的指针指向一个char类型的数据

 4.指针相关的操作
  1.取值:  * *p:取指针变量p中保存的指针对应的空间中的值
  2.取地址: & &a:取变量a在内存中区域的首地址

 5.指针的运算
  1.指针的算术运算
   int a = 100;
   int *p = &a;

   +:p+1 向内存高地址偏移数据类型长度个字节
   -:p-1 向内存低地址偏移数据类型长度个字节
   ++:
   --:
  2.指针的关系运算
   1.判断指针变量中是否位空
    p == NULL
    p != NULL
   2.判断指针变量对应的空间是否为空
    *p == '\0'
    *p != '\0'

    int a[5]={1,2,3,4,5};
     int *ptr=(int *)(&a+1);

      printf("%d,%d/n",*(a+1),*(ptr-1));
        输出结果是什么?
   2 5

 

  3.指针和一维数组的关系
   int a[5]; a[0]、a[1]... a[4];
   int *p = NULL;
  
   一维数组的数组名就是指向数组第一个元素的
   指针

   int a[5];
   int *p = a;

   a[n]的取值方式
   a[n] == *(a+n) == *(p+n) == p[n]

  用指针实现
  1.从终端获得一行字符,字符由数字,字母构成
    统计输入数字的个数
    统计输入大写字母的个数
    统计输入小写字母的个数
  
  2.将字符串"hello world"逆序交换后输出
      "dlrow olleh"
  
  3.用指针实现strlen strcat strcpy strcmp

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值