嵌入式学习Day2(C关键字、数组)(2024.03.10)

本文介绍了C语言的关键字,如main函数参数,以及C语言中的数组(包括整型数组、字符数组和字符串,以及二维数组),还详细讲解了指针的定义、多级指针、数组技巧(如数组名作为首地址和求长)、指针数组和如何处理const修饰的常量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

嵌入式学习Day2(2024.03.10)

C语言关键字

C语言main函数参数

C语言数组

整型数组

定义
int name[size];  //定义固定长度数组
int name[] = {1,2,3} //由元素个数确定数组长度
整形数组初始化
  1. 定义时初始化

int arr[3]={1,2,3}

  1. 定义时部分初始化

int arr[3]={1,2} //其他剩余元素默认为0

  1. 定义时全部初始化为同一值

int arr={1} //全部初始化为1

字符数组和字符串

1.man ascii //查看ascii对应码值
2.C语言中字符数组可看作字符串
3.定义和初始化与整形数组一样 // 注意 char str[3]={‘\0’} 等价于 char str[3]={0}
4.可以将字符串直接初始化给字符数组 eg: char str[]=“hello” char str[]={“hello”} char[30]=“hello”
5.字符数组初始化还可以使用memset函数
void *memset(void *s, int c, unsigned long n);
memset函数:将s指向的内存位置后面n个字节的存储空间替换为c
eg: memset(a,‘a’,sizeof(a));//初始化 char a[10]
6.字符数组以’\0‘结尾,字符数组使用时注意初始化,或特意给最后一位复制 ’\0‘

二维数组

定义时行数可以省略,但列数必须写。使用这种方法定义二维数组时必须同时初始化
二维数组完全初始化 arr[2][2]={x,x,x,x,x,x,x…} arr[2][2]={{},{}}

数组技巧

数组名为数组首地址
数组求长
int len=sizeof(name)/sizeof(name[0]);

C语言指针

指针的定义

数据类型 * 指针变量名
指针变量保存的是对应类型的变量的存储地址
& 取址符
野指针:指针变量保存的内容不合法,定义变量后变量的地址在程序中才是合法的
void * 变量名:void指针可以保存任意类型的地址,所以不能通过void指针操作指针所指向的对象的内容,只是作 > 为函数的返回值或参数使用
指针类型强转: void*p; *(double )p; 一般void * 使用时需要强转类型
指针初始化:一般初始化为0地址 int a=0; 一般对0地址没有操作权限

指针变量的大小由操作系统位数决定

int a;   //定义了一个整型变量a
int * add_a; //定义了一个整型指针变量 add_a
add_a = &a ;  //&a 表示变量a的内存地址,add_a可以用来保存a的内存地址
*add_a=30;   //* + 指针变量 表示指针变量保存的内存地址中的内容 *add_a=30 等价于 a=30  即通过指针变量操作内存中的内容
int a[10];
int *add_a=a; //数组名为地址变量
for(int i=0;i<10;i++){
	printf("a data:%d ",*add_a);
	printf("a data:%d ",*(a+i));
	add_a++;
	// a++ 是不被允许的,因为a是数组名是一个常量不能修改,add_a是一个变量,可以修改
}
/*通过对指针的操作可以遍历数组*/

上述代码中 a=&a[0],&a表示整个数组的大小,a+1 表示偏移一个int,&a+1 表示偏移一个数组的大小

多级指针

概述
一级指针用来保存普通变量的地址,二级指针用来保存一级指针变量本身的地址,三级指针用来保存二级指针变量本身的地址。
使用
int a=10;
int * p=&a; //一级指针
int * *p=&p; //二级指针
int char** str=(char **)&p; //二级指针强转
指针数组

1、指针数组以 NULL(0地址结尾)可以避免计算数组长度;
在这里插入图片描述
2、指针数组=====> 二级指针

数组指针

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
  

int main(){
    int a[2][2]={{1,2},{3,4}};
    int (*p)[2] =a;

    /*通过指针循环输出数组a*/
    for(int i=0;i<2;i++){
        p=p+i;
        for(int j=0;j<2;j++){
        printf("输出:%d  \n",*(*(p)+j));
    }
}
}

通过指针修改const修饰的常量

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值