C语言基础知识

一、结构体赋值:
1.初始化赋值,只需要按成员顺序初始化

		typedef struct {
			int Int;
			int Array[3];
		}MyStruct;
		MyStruct Parameters_1 = {1, {1, 2, 3}};

2.点运算逐个成员赋值(使用点符)

	Parameters_1.Int = 30;

3.整体赋值(相同类型结构体直接赋值)

MyStruct Parameters_2;
Parameters_2 = Parameters_1;

4.通过指针赋值(箭头运算符)

Parameters_1 -> Int = 50;

二、指针
1.pInt 与 *pInt

int *pInt = (int *)pvParameters;
int pvParameters_3 = 1;
表达式类型含义本例中的值
pIntint型指针指针变量(地址)0x4000
*pInt整型指针解引用42
pvParameters_3整型变量1
&pvParameters_3地址/指针取变量地址0x4001

2.数组的指针
数组名是一个指向数组首元素的常量指针(不能修改其指向),例如数组Array
Array的类型是int * ,(传递的是指向首元素的指针)
&Array的类型是int(*)[3];(传递的是指向整个数组的指针)
这两个在数值上是一样的(都是同一个内存地址),但是类型不同
区分一下,指针,指针的地址,指针存储的地址(指针指向的地方)
指针也是一个变量,变量本身占用内存空间
平常说的指针是一个地址,指的是指针指向的地址
例:
假设系统状态:
TCB实际地址:0x20001000
TaskHandle_1变量地址:0x08005000
TaskHandle_1存储的值:0x20001000
TaskHandle_1变量占4字节内存
*TaskHandle_1(指针解引用),取的是存储的地址(如0x20001234)
&TaskHandle_1得到的是指针的地址(如0x800A000)
3.字符串与指针
字符串字面量如“Hello”本质是静态存储区的字符数组

 const char *str ="Hello";

4.函数的指针
在C语言中,函数名代表函数的起始地址,所以函数名本身就是一个函数指针。当我们使用函数名时,实际上就是在使用该函数的指针。

void Task_1 (void *pvParameters)"{
   int *pInt =int *)pvParameters;
   ESP_LOGI(TAG,"输入的整型为:%d",*pInt);
   vTaskDelete(NULL);
   }
int parameters_1 = 1;
void  app_main(void){
   xTaskCreate(Task_1,"Task_1",2048,(void *)parameters_1,1,NULL);//第一个参数为函数指针,此处用函数名
}

三 、%s格式符的特殊性:
1.%s要求传入一个字符指针(char*)
2.它会从这个地址开始:
读取第一个字符,后自动递增地址(pChar + 1),继续读取直到遇到\0;字符串的本质是指针操作

int  *pInt = (int *)pvParameters;
ESP_LOGI(TAG, "输入的整数类型为:%d,*pInt);
char *pchar = (char *)pvParameters;
ESP_LOGI(TAG,"输入的字符串为:%s",pchar);//不用加*号
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值