C语言-变量、输入输出、数组

变量与常量

常量:

  • 定义:常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
  • 在 C 中,有两种简单的定义常量的方式:
    • 使用 #define 预处理器: #define 可以在程序中定义一个常量,它在编译时会被替换为其对应的值。
    • 使用 const 关键字:const 关键字用于声明一个只读变量,即该变量的值不能在程序运行时修改。
  • 注意:数组名也是常量,如下解释:
    int a[] = {1,2,3};
    // a[0] 是变量名,a[0]的值是1
    // a    是数组名,a的值是一个地址,即&a[0],所以a是常量。
    

变量:

  • 定义:变量其实只不过是程序可操作的存储区的名称。
    int a = 10;
    printf("%d,%p\n",a,&a);
    a = 100;
    printf("%d,%p\n",a,&a);
    
    // 10,0xbf90cebc
    // 100,0xbf90cebc
    // 由此可见,a的值发生了变化,但是地址并没有变。
    

输入输出

  • 输出
    • 字符输出函数 int putchar(int c);
      参数: c为字符常量、变量或表达式
      功能:把字符c输出到显示器上
      返值:正常,为显示的代码值;

    • 格式输出函数 printf()

    • 字符串输出函数 int puts(const char *s)
      功能:向显示器输出字符串(输出完,换行)
      说明:字符数组必须以‘\0’结束

  • 输入
    • 字符输入函数 int getchar(void);
      功能:从键盘读一字符
      返值:正常,返回读取的代码值;出错或结束键盘输入,返回-1 (ctrl d)

    • 格式输入函数 int scanf("格式控制串",地址表);
      功能:按指定格式从键盘读入数据,存入地址表指定存储单元中,并按回车键结束。
      返值:正常,返回输入数据个数
      地址表:变量的地址,常用取地址运算符&

      int yy,mm,dd;
      scanf("%4d%2d%2d",&yy,&mm,&dd); // 中间输入可以使用空格和回车。仅针对整形
      printf("%4d-%2d-%2d\n",yy,mm,dd);
      
    • 字符串输入函数 char * gets(char *str);
      功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’
      说明1:输 入串长度应小于字符数组维数
      说明2:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志。

    • 注意:输入函数留下的“垃圾

      int x;
      char ch;
      scanf("%d",&x);
      scanf("%c",&ch);// 回车也是字符
      printf("x=%d,ch=%d\n",x,ch);
      
      //方法1:用getchar()清除
      //方法2:用格式串中空格或“%*c”来“吃掉”
      

数组

一维数组

  • 定义:数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素。

  • 存储特点:数组中的元素在计算机内存中是连续存储的。数组名表示内存首地址。

  • 格式:<存储类型> <数据类型 > <数组名>[<表达式>]

  • 数组的引用:数组必须先定义,后使用。只能逐个引用数组元素,不能一次引用整个数组。

  • 数组的初始化,如下:

    static int a[5];  // 等价于:a[0]=0;  a[1]=0; a[2]=0; a[3]=0; a[4]=0;
    
    int a[5]={6,2,3};  // 等价于:a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0;
    // int a[3]={6,2,3,5,1};  // error
    
    int a[]={1,2,3,4,5,6};//编译系统根据初值个数确定数组维数
    
    // 总结:[]中必须要给数组维数,然后分配内存空间。
    
    • 数组的初始化注意点:
      • 数组不初始化,其元素值为随机数。如int a[10],其元素是随机的。
      • 数组部分初始化,其未被初始化的元素值是0。如int a[10]={1,2},则a[3]的值默认是0。
      • 对static数组元素不赋初值,系统会自动赋以0值。
  • 定义数组维度

    int i = 15; int a[i];
    
  • 关于数组越界

    • C语言对数组不作越界检查(包括赋值和取值),使用时要注意

多维数组

  • 二维数组声明格式:
    int a[3][4];
    int b[][4];// 声明时列数不能省略,行数可以
    
  • 多维数组的元素存放顺序
    内存是一维的,多维数组元素按照行序优先。如int a[2][2],则顺序是a[0][0],a[0][1],a[1][0],a[1][1]。
posted @ 2023-07-30 02:30  扬帆去远航  阅读(264)  评论(0)    收藏  举报