C语句结构及数组

------------------------------------------------语句结构---------------------------------------------------------------------

if语句:if.....[else if,...][else]
switch语句:switch(表达式){
                case常量表达式1:语句组;[break;]
                case常量表达式1:语句组;[break;]
                case常量表达式1:语句组;[break;]
                case常量表达式1:语句组;[break;]
                case常量表达式1:语句组;[break;]
                [default:语句组;][breake;]
           }
           表达式的类型为整型或者字符型。case后面为常量表达式(包含整型常量表达式,字符常量表达式)。


while循环:条件成立,进入循环体;
do.....while循环:首次进入循环体,若条件成立,进入循环体;

for循环:表达式for(初始变量;判断条件;循环变量修改)
        缺省判断条件时,默认循环成立,当循环体无结束循环操作的语句,程序将陷入死循环

break;:终止循环。
continue;:结束本次循环体中的操作。


--------------------------------------------------------------数组-------------------------------------------------------------

数组:是数据类型相同的一类数据的集合。
一维数组:
        声明(定义)方式:数据类型 数组名[数组长度],例如:int arr[size],其中的size在C89标准中必须为整型常量表达式
                       在C99中引入了变长数组,size可以为变量
                       C11将变长数组从标准中移除,当做可选。

        初始化列表的项数应该与数组的大小一致,当未初始化时,数组存储的是垃圾值;数值类型的数组如若初始化了部分数据,则未被用户初始化的数据将自动初始化为0。

        如果初始化数组时省略方括号中的数字,编译器会根据初始化中的项数来确定数组的大小。

        不允许将数组作为一个单元给另外一个单元进行赋值。

二维数组:
        声明(定义)方式:数据类型 数组名[数组下标1][数组下标2],其中数组下标1可缺省,编译器会根据初始化的数据,自动判断数组下标1的大小。

字符数组:char 数组名[size]
         当初始化部分数据时,未被初始化的数据为\0;
         初始化方式 char str[] = {'h','e','l','l','o'};
               或者 char str[] = {"hello"};
               或者 char str[] = "hello";


        scanf()输入字符数组:scanf("%s %s %s",arr1,arr2,arr3);
                            空格、制表符、回车都会作为输入数据的分隔符,
                            切忌scanf("%s,%s",arr1,arr2);这种方式,只会初始化arr1,会导致arr2里面的未被初始化。

        printf()输出字符数组:输出的字符不会包括\0,只会输出第一个\0前面的字符。


        gets():函数原型 char *gets(char *string);
                从键盘输入字符串(可以包含空格),按回车键结束输入。
        puts():将字符数组中存放的字符串输出,遇到第一个\0时停止输出,并自动换行。

                    
数组与指针:数组名是数组首元素的地址,假设arr是一个数组,则 arr==&arr[0] 是成立的。

           指针是一个值为内存地址的变量(或数据对象)。

           间接(或称解引用运算符):*,取出内存地址所对应的值,优先级大于算数运算符,右结合性。

           声明指针:数据类型 * 指针名称,如int * pr;

           指针加1:递增它所指类型的大小(以字节为单位)。通常int类型占用4个字节,int *类型的指针加1即增加4个字节。
           指针减法与指针减法同理。

           在函数定原型和函数定义头中,若要添加指针形参可使用int * arr 和 int arr[]两种形式,但是int arr[]的写法仅仅用于声明形式参数,同时
           int arr[]有两层含义,第一层含义就是arr是一个指向int类型的地址,同时arr也是一个int类型数组中的元素。

           仅当arr是一个指针变量时才能使用++和--,作为数组名时是不能使用的。

           重要点:使用指针之前一定要进行初始化,否则指向的位置不确定,可能造成严重的错误。

           const修饰符:创建指向const的指针、创建const数组、创建const指针
                          ①int arr[5] = {1,2,3,4,5}; 
                          const int * pr = arr; //pr被称为指向const的指针
                       表示不能通过pr对arr数组中元素的值进行修改。

                       ②指向const的指针可被初始化为const的数据或者非const的数据
                       
                       ③非指向const的指针(普通指针)只能被初始化为非const的数据,
                       因为把const的数据赋值给普通指针时,那么将可以通过指针修改const数据了,因此C语言规定不允许这种操作


                       ④const int arr[5] = {1,2,3,4,5}; //创建了一个const的数组

                       ⑤int * const pr = arr; //创建了一个const的指针,表示pr除初始化可被赋值,之后不能进行改变。
           
           复合字面量:C99标准新添加,int arr[2] = {1,2}等价于(int [2]){1,2},数组和复合字面量均可省略大小。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值