【课堂笔记】C语言基础与提高2

数组:

 

int a[10];        表示定义了一个整型数组,数组名为a,有10个元素。

a[0]——a[9],从低地址到高地址。

 

一维数组的初始化:

 

int a[4] = {0, 1, 2, 3};

也可以给部分赋值,只要对其中一个元素赋过值,其他未赋值的元素为0,如果都不赋值,则各元素的值为随机值。

 

数组的地址:

 

a 和 &a, a即是数组名也是地址

a 与 &a的值相同,意义不同

a是数组首元素的地址,&a是整个数组的地址,取第一个元素的地址作为整个地址。

sizeof(a) 求数组长度。

 

*(a[1] + 1), *(&a[1][1]), (*(a+1))[1]可以表示a[1][1]

 

例:冒泡排序法

 

#include <stdio.h>

 

#define SIZE 10

 

void maopao(int a[])

{

       inti, j, tmp;

       for(i = 0; i < SIZE; i++)

       {

              for(j = 0; j < SIZE – i - 1)

              {

                     if(a[j] > a[j + 1])

                     {

                            tmp= a[j];

                            a[j]= a[j + 1];

                            a[j+ 1] = tmp;

                     }

              }

       }

}

 

int main()

{

       inta[SIZE];

       inti, j, tmp;

 

       printf(“Pleaseinput:\n”);

 

       for(i = 0; i < SIZE; i++)

       {

              scanf(“%d”,&a[i]);

       }

 

       maopao(a);

 

       for(i = 0; i < SIZE; i++)

       {

              printf(“%d”, a[i]);

       }

       printf(“\n”)

       return0;

}

二维数组的初始化

a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9,10, 11, 12}};

 

a, &a, a[0], *a的区别

 

a首行的地址

&a 数组的地址

a[0] 数组首行首元素的地址

*a 同a[0]

 

*与[]一个意思,a[0]等价于*(a+0), a[1]等价于*(a+1)

 

字符数组

char c[10];

求数组的元素个数: sizeof(a) / sizeof(a[0]

strlen():测试字符串长度的函数,函数的值为字符串中的实际长度(不包括’\0’)

 

scanf():只能获取空格前面的字符

strcat():将两个char类型连接

strcpy():会把’\0’也给复制过去

strncpy(str, ptr, 5):指定复制的字节数

strcpy的两个参数是两个地址

strcmp(str, ptr):比较两个字符串,结果有>0, =0, <0;

 

str1 = “HHH”; 不合法

str1 = str2; 不合法

 

例:在字符数组中指定位置插入字符

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

//第一种方法

/*int main()

{

       charstr[20] = {0};

       charch;

       intnum, i, length;

 

       printf("Pleaseinput :\n");

       scanf("%s%d%c", str, &num, &ch);

 

       if(num>= 20)

       {

              printf("ERROR");

              exit(1);

       }

 

       length= strlen(str);

      

       for(i = 0; i < length - num + 1; i++)

       {

              str[length- i] = str[length - 1 - i];

       }

 

       str[num- 1] = ch;

 

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

       return0;

}*/

//第二种方法

int main()

{

       charstr[20] = {0};

       charptr[20] = {0};

       charch;

       intnum, i, length;

      

       printf("Pleaseinput:\n");

       scanf("%s%d%c", str, &num, &ch);

 

 

       if(num>= 20)

       {

              printf("ERROR");

              exit(1);

       }

 

       strncpy(ptr,str, num -1);

       ptr[num- 1] = ch;

       //strncat(ptr,&ch, 1);

       strcpy(ptr+ num, str + num -1);

 

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

       return0;

}

 

函数

 

C程序:只包含一个主函数main(),也可以包含一个主函数和若干个其他函数(库函数和自定义函数)

 

函数类型       函数名(形式参数类型说明表)

{

       声明部分

       执行部分

}

 

形参实参名字可以不一样,但个数于类型必须一致。

函数名是一个地址。

 

函数调用的步骤:

1、 通过函数名找到函数的入口地址

2、 给形参分配空间(与实参的空间地址无关)

3、 传值(实参 >> 形参)【分为值传递和地址传递】

4、 执行函数体

5、 返回(return)到main函数

6、 释放空间(释放的是栈空间)

 

c语言空间分为:

数据段:存放全局变量,被static修饰的静态变量

代码段:存放代码及常量

栈空间:局部变量;程序运行后全部释放

堆空间:

 

register 寄存器变量

尽量在大量频繁操作时使用寄存器变量,且声明变量个数应尽量少。

 

寄存器变量没有地址

 

extern声明外部变量,编译时需提供c文件

gcc 1.c 2.c -o 1

只有全局变量能被extern 声明

 

static修饰全局变量,改变该变量作用域,仅能在本文件中使用。

static 修饰函数,改变函数作用域,仅能在本文件中使用

static修饰局部变量:改变变量的生命周期,直到程序结束才被释放

 

main()函数在今后的编写中应该尽量简洁,多调用函数,而不是在main中使用函数。

 

 

预处理

预处理命令种类

宏定义 #define

文件包含 #include

条件编译 #if--#else--#endif

语句结尾不加分号

#include <>:去系统指定的目录中找(库)

#include ””:当前目录下(自定义)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值