C语言基础知识04---指针

目录

1、指针

1.1 指针概念

1.2 指针的大小

1.3 指针的定义

1.4 多级指针

1.5 指针的初始化

1.6 指针的使用

1.7 类型转换

1.8 大小端

1.9 地址偏移

1.10 指针常量&&常量指针

1.11 指针数组&&数组指针


1、指针

   1.1 指针概念

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

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

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

   1.2 指针的大小

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

   1.3 指针的定义

        格式:数据类型 变量名

        指针的标识:

        int a;

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

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

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

   1.4 多级指针

& 取地址 把空间看作整体,以起始字节地址代表整个空间的地址

   1.5 指针的初始化

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

        int *p=NULL;

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

   1.6 指针的使用

        * 乘法 双目 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

   1.7 类型转换

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

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

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

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

   1.8 大小端

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

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

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

   1.9 地址偏移

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

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]

  1.10 指针常量&&常量指针

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

  1.11 指针数组&&数组指针

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.rhkb.cn/news/34873.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring boot 发送邮件验证码

一、前置需求 1、准备邮箱 2、登录授权码 qq邮箱在–>设置–>账号POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 开启服务 二、发送邮件 1、简单邮件 包含邮件标题、邮件正文 2、引入mail启动器 <dependency><groupId>org.springframework.boot</groupI…

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

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

[网络][tcp协议]:tcp报头

tcp(传输控制协议)是一种面向字节流的传输层协议,相较于udp协议,tcp能保证传输数据的可靠性与准确性,tcp也是目前最常见的传输层协议 本文主要介绍tcp报头各个字段的含义与用途 注:保留6位和6位标记位是目前最普遍的写法,在我查资料时,发现有一些拓展情况,会在后文细说 最简单的…

【sklearn 01】人工智能概述

一、人工智能&#xff0c;机器学习&#xff0c;深度学习 人工智能指由人类制造出的具有智能的机器。这是一个非常大的范围&#xff0c;长远目标是让机器实现人工智能&#xff0c;但目前我们仍处在非常初始的阶段&#xff0c;甚至不能称为智能 机器学习是指通过数据训练出能完成…

Excel ScriptLab学习笔记

注意 The Excel JavaScript API 没有“Cell”对象或类。 相反&#xff0c;Excel JavaScript API 将所有 Excel 单元格定义为 Range 对象。 Excel UI 中的单个单元格转换为 Excel JavaScript API 中包含一个单元格的 Range 对象。 单个 Range 对象也可以包含多个连续的单元格。…

【数据结构】线性表简介

0.本篇问题 线性表&#xff0c;顺序表&#xff0c;链表什么关系&#xff1f;它们是逻辑结构还是存储结构&#xff1f;线性表的基本操作有哪些&#xff1f; 线性表是具有相同数据元素的有限序列。 表中元素有先后次序&#xff0c;每个元素占有相同大小的存储空间。 一、线性…

设计模式(行为型)-备忘录模式

目录 定义 类图 角色 角色详解 &#xff08;一&#xff09;发起人角色&#xff08;Originator&#xff09;​ &#xff08;二&#xff09;备忘录角色&#xff08;Memento&#xff09;​ &#xff08;三&#xff09;备忘录管理员角色&#xff08;Caretaker&#xff09;​…

Navicat如何查看密码

近期遇到需要将大部分已存储的navicat数据库转发给其他人&#xff0c;于是乎进行导出文件 奈何对方不用navicat&#xff0c;无法进行文件的导入从而导入链接 搜罗navicat的密码查看&#xff0c;大部分都为php代码解析 以下转载GitHub上看到的一个python代码解析的脚本 这里是对…

Matlab 四分之一车体车辆半主动悬架鲁棒控制

1、内容简介 略 Matlab 173-四分之一车体车辆半主动悬架鲁棒控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

Python学习第十九天

Django-分页 后端分页 Django提供了Paginator类来实现后端分页。Paginator类可以将一个查询集&#xff08;QuerySet&#xff09;分成多个页面&#xff0c;每个页面包含指定数量的对象。 from django.shortcuts import render, redirect, get_object_or_404 from .models impo…

【大模型】Transformer、GPT1、GPT2、GPT3、BERT 的论文解析

前言 在自然语言处理&#xff08;NLP&#xff09;和深度学习的快速发展中&#xff0c;Transformer模型和 GPT系列模型扮演了至关重要的角色。本篇博客旨在对这些开创性的论文进行介绍&#xff0c;涵盖它们的提出时间、网络结构等关键信息&#xff0c;能够快速的理解这些模型的设…

【DeepSeek应用】本地部署deepseek模型后,如何在vscode中调用该模型进行代码撰写,检视和优化?

若已成功在本地部署了 DeepSeek 模型(例如通过 vscode-llm、ollama 或私有 API 服务),在 VS Code 中调用本地模型进行代码撰写、检视和优化的完整流程如下: 1. 准备工作:确认本地模型服务状态 模型服务类型: 若使用 HTTP API 服务(如 FastAPI/Flask 封装),假设服务地址…

【C语言】函数和数组实践与应用:开发简单的扫雷游戏

【C语言】函数和数组实践与应用&#xff1a;开发简单的扫雷游戏 1.扫雷游戏分析和设计1.1扫雷游戏的功能说明&#xff08;游戏规则&#xff09;1.2游戏的分析与设计1.2.1游戏的分析1.2.2 文件结构设计 2. 代码实现2.1 game.h文件2.2 game.c文件2.3 test.c文件 3. 游戏运行效果4…

需求分析、定义、验证、变更、跟踪(高软47)

系列文章目录 需求分析、定义、验证、变更、跟踪 文章目录 系列文章目录前言一、需求分析二、需求定义三、需求验证四、需求变更五、需求跟踪六、真题总结 前言 本节讲明需求分析、定义、验证、变更、跟踪相关知识。 一、需求分析 二、需求定义 三、需求验证 四、需求变更 五、…

【拒绝算法PUA】LeetCode 2270. 分割数组的方案数

系列文章目录 【拒绝算法PUA】0x00-位运算 【拒绝算法PUA】0x01- 区间比较技巧 【拒绝算法PUA】0x02- 区间合并技巧 【拒绝算法PUA】0x03 - LeetCode 排序类型刷题 【拒绝算法PUA】LeetCode每日一题系列刷题汇总-2025年持续刷新中 C刷题技巧总结&#xff1a; [温习C/C]0x04 刷…

uniapp 实现的步进指示器组件

采用 uniapp 实现的一款步进指示器组件&#xff0c;展示业务步骤进度等内容&#xff0c;对外提供“前进”、“后退”方法&#xff0c;让用户可高度自定义所需交互&#xff0c;适配 web、H5、微信小程序&#xff08;其他平台小程序未测试过&#xff0c;可自行尝试&#xff09; 可…

每日Attention学习26——Dynamic Weighted Feature Fusion

模块出处 [ACM MM 23] [link] [code] Efficient Parallel Multi-Scale Detail and Semantic Encoding Network for Lightweight Semantic Segmentation 模块名称 Dynamic Weighted Feature Fusion (DWFF) 模块作用 双级特征融合 模块结构 模块思想 我们提出了 DWFF 策略&am…

接上一篇,C++中,如何设计等价于Qt的信号与槽机制。

看下面例子&#xff1a; class FileManager : public QObject {Q_OBJECTpublic:FileManager(QObject* parent nullptr) : QObject(parent) {}void changeFileName(const QString& newName) {fileName newName;emit fileNameChanged(fileName);}signals:void fileNameChan…

上传本地项目到GitHub

一、在GitHub上创建仓库 1.点击右上角头像–>点击Your repositories 2.点击New 3.创建仓库 网址复制一下&#xff0c;在后面git上传时会用到 二、打开Git Bash 1.cd 进入项目所在路径 2.输入git init 在当前项目的目录中生成本地的git管理&#xff08;当前目录下出现.…

基于Python的selenium入门超详细教程(第2章)--单元测试框架unittest

学习路线 自动化测试介绍及学习路线-CSDN博客 ​自动化测试之Web自动化&#xff08;基于pythonselenium&#xff09;-CSDN博客 基于Python的selenium入门超详细教程(第1章)--WebDriver API篇-CSDN博客 目录 前言&#xff1a; 一、单元测试 1. 单元测试的定义 2. 单元测…