C语言指针

指针

指针基础

指针概念

  • 指针就是地址

地址:内存单元的编号(指针)

每个变量在内存中都有一个地址,这个地址可以通过指针来访问。

  • 指针也是一种数据类型

指针类型,这种数据类型是专门用来处理地址这种数据的

指针变量的定义

基类型 *指针变量名;

基类型(数据类型)

整型、浮点型、字符型、数据结构、指针类型、结构体类型、函数类型...

表示该指针类型所指向的内存空间存放什么类型的数据

*

定义时表示此时定义的是一个指针类型的变量

指针变量名

符合标识符命名规则

数据类型 变量名;

int *p; //pointer

p是一个指向int类型数据的指针

复制代码
int a= 10;//a所在的空间是用来存放 int (整型)类型的数据的

float b=10;// 声明一个浮点型变量b,并初始化为10.0。b所在的空间是用来存放float类型的数据的。

int *p = &a;// 声明一个指向int类型数据的指针p,并将a的地址赋给p。

int *p = &b;// 错误:不能将float类型变量b的地址赋给int类型的指针p。

&a 表示获得a所在空间的首地址,表示 获得了一块 可以存在int型数据的内存空间的地址
int *------整体叫指针类型

int*含义 首先表示是一个 指针类型,表示指向int型数据的指针类型

指针变量的引用

int a= 10;

int *p = &a; p指向a------因为p中保存la的地址

a的数据类型int

&a的数据类型 int*------地址这种数据:对应到指针数据类型

*指针运算符

单目运算、运算对象只能是指针(地址)

*p 表示访问p所指的基类型的内存空间

*p间接访问 :通过指针间接访问变量的值

通过a访问直接访问:通过变量名直接访问变量的值

复制代码
int main() 
{
    int a = 10; // 声明一个int类型变量a,并初始化为10
    int *p = &a; // 声明一个指向int类型数据的指针p,并将a的地址赋给p

    // 直接访问变量a的值
    printf("Direct access, value of a: %d\n", a);

    // 间接访问变量a的值,通过指针p
    printf("Indirect access, value pointed to by p: %d\n", *p);
    return 0;
}

指针操作的详细步骤

step1:首先拿出p中地址,到内存中定位

step2:偏移出sizeof(基类型)大小的一块空间

step3:将偏移出的这块空间,当作一个基类型变量来看(*p运算完成效果)

*p运算效果就相当于是一个基类型变量

*p<=>a

*p 访问和操作的是指针 p 指向的地址处的值,这正是变量 a 所在的内存地址。

因此,*p 就等价于 a

换句话说,*p 直接操作 a 的值,因为 p 保存了 a 的地址

指针传参

  • 指针进阶

指针+一维整型数组

指针+一维字符型数组

  • 指针高级

指针+二维整型数组

指针+二维字符型数组

指针的数组

函数指针

指针+指针

相关推荐
好吃的肘子13 分钟前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
ghost14315 分钟前
C#学习第23天:面向对象设计模式
开发语言·学习·设计模式·c#
小白学大数据16 分钟前
Scrapy框架下地图爬虫的进度监控与优化策略
开发语言·爬虫·python·scrapy·数据分析
立秋678922 分钟前
用Python绘制梦幻星空
开发语言·python·pygame
明月看潮生42 分钟前
青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块
开发语言·青少年编程·rust·编程与数学
后青春期的诗go1 小时前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(二)
开发语言·后端·rust·rocket框架
小刘要努力呀!1 小时前
嵌入式开发学习(第二阶段 C语言基础)
c语言·学习·算法
草莓熊Lotso1 小时前
【C语言字符函数和字符串函数(一)】--字符分类函数,字符转换函数,strlen,strcpy,strcat函数的使用和模拟实现
c语言·开发语言·经验分享·笔记·其他
盛夏绽放1 小时前
Python字符串常用内置函数详解
服务器·开发语言·python
我想睡觉2611 小时前
Python训练营打卡DAY27
开发语言·python·机器学习