C语言学习笔记

本文详细介绍了C语言中数组、指针和函数的使用。涵盖了数组的基本形式、初始化、遍历及字符串操作;指针的概念、类型、运算以及在二维数组中的应用;函数的声明、定义、参数传递方式和回调函数的运用。同时提供多个实践练习以加深理解。
摘要由CSDN通过智能技术生成

C语言3大难点:数组、指针、函数

数组

多个同种数据类型数据的集合,在内存空间上连续存储

基本形式:

<存储类型> <数据类型> <数组名>[元素个数]

存储类型:数组存储的方式

数据类型:存储的多个元素是什么数据类型,就写什么数据类型

数组名:和标识符的命名规则保持一致

是数组的首个元素的地址,代表了整个数组

元素个数:数组想要存放多少个元素,这里就写多少;写的是一个常量(普通整型常量:10,20,5;标识符常量:#denfine SIZE 20)

声明和定义:

int arr[5];
char buf[10];

初始化:

1、完全初始化

数组的每一个元素,都赋予一个初始值
例:
int arr[5] = {0,1,2,3,4};
char buf[5] = {'h','e','l','l','o'};

2、部分初始化

数组的前面部分元素给予一个初值
例:
int arr[5] = {0,1,2};
char buf[5] = {'w','o'};
未被赋值的元素默认为0(字符数组默认为'\0')
​
int arr[5] = {0};//全部为0
char buf[5] = {0};//全部为'\0'

3、未初始化

定义时未给元素赋初值
例:
int arr[5];
char buf[5];
数组中的元素为随机值

4、省略初始化

定义时未给定元素个数
例:
int a[] = {1,2,3};
初始化时给定多少个元素,系统就分配多大的空间

数组的使用:

通过数组名加下标的方式去访问

int a[5];
​
该数组能访问到的元素:a[0]     a[1]    a[2]    a[3]    a[4]
若一个数组的元素个数为n
那该数组能访问到的下标为0~n-1
​
若访问a[5]则数组越界访问(非法访问内存),会产生段错误
​
​
定义数组时,下标表示元素个数
在使用数组时,下标表示的是第几个元素
注意:定义和使用时,下标的含义不一样

数组的遍历

#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int arr[5] = {0, 1, 2, 3, 4};
    char buf[10];
​
    int i = 0;
    for( i = 0; i < 5; i++)
    {
        printf("arr[%d] = %d\n", i, arr[i]);
    }
   
    return 0;
} 
​
结果:
arr[0] = 0
arr[1] = 1
arr[2] = 2
arr[3] = 3
arr[4] = 4
​

练习:

定义一个整型数组,计算所有元素的和,并打印其中的最大值和最小值及其下标

#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int a[10] = {7,81,3,99,102,24,17,1,82,56};
​
    int sum = 0;
    int i = 0;
    int max = a[0];
    int min = a[0];
    int max_i = 0;
    int min_i = 0;
    for( i = 0; i < 10; i++)
    {
        if( a[i] >= max)
        {
            max = a[i];
            max_i = i;
        }
        if( a[i] <= min)
        {
            min = a[i];
            min_i = i;
        }
        sum += a[i];
    }
    printf("sum:%d\n", sum);
    printf("max:%d  max_i:%d\n", max, max_i);
    printf("min:%d  min_i:%d\n", min, min_i);
    return 0;
} 
​
结果:
sum:472
max:102  max_i:4
min:1  min_i:7
​

字符数组和字符串

字符数组可以用来存放字符串

char buf[6] = {'h','e','l','l','o'};
char buf[6] = "hello";
​
char buf[5] = {'h','e','l','l','o'};
char buf[5] = "hello"//数组越界访问
​
注意:用字符数组存放字符串时,一定要给'\0'预留空间

练习:从键盘上输入一个字符串,求该字符串的有效长度

#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    char buf[10] = {0};
    gets(buf);
    int i = 0;
    while(buf[i] != '\0')
    {
        i++;
    }
    /*
    for(i = 0; i < 10; i++)
    {
        if( buf[i] == '\0')
        {
            printf("i:%d\n", i);
            break;
        }
    }
    */
    printf("i:%d\n", i);
    return 0;
} 

练习:从键盘上获取两个字符串,分别存放在两个数组里面,比较两个数组是否相同,若相同,输出0,若第一个比第二个大,则输出1,如果第一个比第二个小,则输出-1;

#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    char a[10] = {0};
    char b[10] = {0};
    gets(a);
    gets(b);
    int i = 0;
    for( i = 0; i < 10; i++)
    {
        if( a[i] > b[i])
        {
            printf("1\n");
            break;
        }
        else if( a[i] < b[i])
        {
            printf("-1\n");
            break;
        }
        else
        {
            if( 9 == i)
                printf("0\n");
            continue;
        }
    }
    return 0;
}

数组的大小

sizeof(数组名):计算数组的字节大小
​
int arr[10] = {0};
sizeof(arr) == 40;(4*10)即   数据类型所占字节数*数组的元素个数
​
sizeof(数组名)/sizeof(数组的数据类型) -->元素个数
sizeof(数组名)/元素个数 -->数组的数据类型

字符串函数

1、strlen

头文件:#include    <string.h>
函数原型:size_t strlen(const char *s);
作用:求字符串有效长度
例:

#include <stdio.h>
#include <string.h>
​
int main(int argc, char *argv[])
{ 
    char buf[10] = {0};
    int arr[10] = {0};
    scanf("%s", buf);
    printf("sizeof(buf):%ld\n", sizeof(buf));
    printf("strlen:%ld\n", strlen(buf));
    printf("siezof(arr):%ld\n", sizeof(arr));
    return 0;
}
 
​
结果:
asdf
sizeof(buf):10
strlen:4
siezof(arr):40
​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值