C语言基础知识04

news/2025/3/16 4:54:02/

指针

指针概念

        指针保存地址,地址是字节的编号

        指针类型和保存的地址类型要一直

        使用时注意,把地址转换为&变量的格式来看        int a[3];  a转为&a[0]

指针的大小

        64bit        固定8字节,        32bit        固定4字节

指针的定义

        格式:数据类型 变量名

        指针的标识:

        int a;

        int a[3];  先写单个变量,变量名后加[]和元素个数

        int *a;  先写单个变量,在变量名后面加*,表示指向该空间类型的指针

        空间类型==地址类型==数据类型

多级指针

指针的初始化

        指针不初始化--野指针,应避免野指针的出现

        int *p=NULL;

int a=5;
int *p=&a;//初始化直接指向变量地址
char *p= “hello”;
char a[10]= “hello”;

指针的使用

        * 乘法 双目 1*2 

        * 解指针/解地址 单目 *地址 

        & 取地址 同空间变量获取空间的地址 

        * 解地址 通过空间地址找到空间变量 

        所以*&可以抵消

int a=5;
int *p=&a;
int **q=&p;
int ***k=&q;
printf(“%d”, a);//5
printf(“%d”, *p);//5
printf(“%d”, **q);//5
printf(“%d”, ***k);//5

类型转换

        数据转换:自动转换,自动向高精度转换

                强制转换:float a=3.14; printf("%d", (int)a);

        地址转换/空间类型转换:强制转换

int a=65;
char *p=(char *)&a;// &a 代表 4 字节空间地址 (char *)强制转换为 1 字节空间地址
if(*p == 65)
{
printf(“小端\n”);
}

大小端

        低位地址存高位数据        大端存储

        低位地址存低位数据        小端存储

        数据在进行网络传输时,尤其是跨平台和设备,会出现存储方式不同而引起的数据错误,所以在发送数据之前需要进行大小端测试

地址偏移

        地址加减,加减的是空间个数,空间的大小由空间类型决定

int a[5][20];
int *p=&a[0][0];
p+1 == &a[0][0]+1 == &a[0][1]
(int (*)[20])p+1 == &a[0]+1 == &a[1]
int (*q)[20]=&a[0]; // sizeof(q)==8
变量 q 先与*结合,所以 q 是指针
再与[20]结合,所以指针指向数组,数组有 20 个元素
最后与 int 结合,所以数组元素是整型变量
q+1 == &a[0]+1 == &a[1]
(int *)q+1 == &a[0][0]+1 == &a[0][1]

指针常量&&常量指针

关键字:const
功能:修饰变量为常量
int *p; // 整型指针
float *p; // 浮点型指针
char *p; // 字符指针
常量指针:指向常量的指针
数字常量 字符常量 字符串常量
指针常量:指针自己是常量
const char *p;//常量指针 const 修饰*p,指针指向的空间是常量
char const *p;//常量指针
char * const p;//指针常量 const 修饰 p,指针自身是常量
const char * const p;//常量指针常量

指针数组&&数组指针

int a[5];// 整型数组
float a[5];// 浮点型数组
char a[5];// 字符数组
指针数组:由指针组成的数组
int *a[5];// 整型指针数组
char *a[5];// 字符指针数组
数组指针:指向整个数组的指针
int (*p)[5];// 整型数组指针
int a[2][3];
int (*p[2])[3]; // 整型数组指针数组
p[0]=&a[0];
p[1]=&a[1];

二维字符数组&&字符指针数组

char a[3][5]={“123”, “456”, “789”}; // 二维字符数组a 字节大小:15
char *a[3]={“123789”, “456789”, “7896666666”}; // 字符指针数组a 字节大小:24printf(“%s\n”, a[1]+1); // 56789

附面试题:

1、地址为0x80000020的内存段存储一个浮点型数据3.14

        float *p(float *)0x80000020;

        *p = 3.14;

2、

unsigned char *p=0x10000010;

(unsigned long *)p+2=0x10000020;

(unsigned long)p+2=0x10000012;

(char (*)[5])p+2=0x1000001A;

(short (**))p+2=0x10000020;

3、

#include <stdio.h>
int main()
{char *p = "%s,%d\n";char *a = "hello";printf(p,a,36);printf(p+3,36);printf("%s,%d\n","hello",36);return 0;
}


http://www.ppmy.cn/news/1579494.html

相关文章

【机械视觉】C#+VisionPro联合编程———【五、硬币检测小项目实现(C#+VisionPro联合编程和csv文件格式操作)】

【机械视觉】C#VisionPro联合编程———【五、硬币检测小项目实现(C#VisionPro联合编程和csv文件格式操作)】 项目介绍 总共有十二张检测的图片&#xff0c;当点击检测按钮时检测当前展示的图片并且将检测效果展示在表格中&#xff0c;当点击上一页或下一页时换检测图片&…

G-Star 公益行起航,挥动开源技术点亮公益!

公益组织&#xff0c;一直是社会温暖的传递者&#xff0c;但在数字化浪潮中&#xff0c;也面临着诸多比大众想象中复杂的挑战&#xff1a;项目管理如何更高效&#xff1f;志愿者管理又该如何创新&#xff1f;宣传推广怎么才能更有影响力&#xff1f;内部管理和技术支持又该如何…

通过qemu仿真树莓派系统调试IoT固件和程序

通过qemu仿真树莓派系统调试IoT固件和程序 本文将介绍如何使用 QEMU 模拟器在 x86 架构的主机上运行 Raspberry Pi OS&#xff08;树莓派操作系统&#xff09;。我们将从下载镜像、提取内核和设备树文件&#xff0c;到启动模拟环境&#xff0c;并进行一些常见的操作&#xff0…

微软 System Center Configuration Manager(SCCM)的组件文件

微软 System Center Configuration Manager(SCCM) 或 Microsoft Endpoint Configuration Manager(MECM) 的组件文件,属于企业级设备管理工具的一部分。以下是具体说明: C:\Windows\CCM\smsswd.exe C:\Windows\CCM\tsmanager.exe smsswd.exe 和 tsmanager.exe 是 Micros…

Excel(函数篇):Vlookup函数 详细用法

目录 Vlookup函数基础用法精确查找易错问题员工信息查询表 进阶用法近似匹配&#xff08;模糊查找&#xff09;结合通配符查找反向查找 高级技巧多条件查找动态列查询 错误处理屏蔽错误值处理数字/文本格式问题注意事项常见错误解决方案 拓展用法跨表与跨工作簿查找查找返回多列…

机器学习-----决策树

文章目录 1、概念2. 决策树的构建过程2.1 特征选择2.2 树的生成2.3 树的剪枝 3. 决策树的优缺点4. 决策树的应用4.1 分类任务4.2 回归任务4.3 集成学习 代码示例 总结 1、概念 1.1决策树是什么 决策树是通过对样本的训练&#xff0c;建立出分类规则&#xff0c;并对新样本进行…

Spring Cloud Config - 动态配置管理与高可用治理

引言&#xff1a;为什么需要配置中心&#xff1f; 在微服务架构中&#xff0c;配置管理面临分散化、多环境、动态更新三大挑战。传统基于application.yml等配置文件的硬编码方式&#xff0c;导致以下问题&#xff1a; • 环境差异&#xff1a;开发、测试、生产环境配置混杂&a…

TI的Doppler-Azimuth架构(TI文档)

TI在AWR2944平台上推出新的算法架构&#xff0c;原先的处理方式是做完二维FFT后在RD图上做CFAR检测&#xff0c;然后提取各个通道数据做测角。 Doppler-Azimuth架构则是做完二维FFT后&#xff0c;再做角度维FFT&#xff0c;生成Doppler-Azimuth频谱图&#xff0c;然后在该频谱图…