c语言---指针

指针

前言

记录一个数据对象在内存中的存储位置,需要两个信息:

1、数据对象的首地址。

2、数据对象占用存储空间大小

基础数据类型所占内存空间大小(字节),一个字节代表8个二进制位

char 1

short 2

int 4

long 4

longlong 8

float 4

double 8

指针数据类型

取地址运算符&

可以获取数据对象的首地址和所需存储空间大小

声明指针类型

复制代码
int  n;
int* pn=&n;

指针类型的值是目标数据对象的首地址!

C语言中通过不同的指针类型来标记目标数据对象的空间大小,那么不同数据类型能否相互赋值呢?

比如:

复制代码
#include <stdio.h>
​
int main() {
int n;
int *pn=&n;
char y;
char *py=&y;
​
    pn=py;
    
    printf("pn=%u\n",pn);
    printf("py=%u\n",py);
​
    return 0;
}
​

由于char和int 类型所占空间大小不一样,不能进行自动转换。

取值运算符*

根据指针存储的首地址和空间大小找到目标数据对象。

注意:%p是指针类型专用站位符,在32以及64位编译条件下都能保证打印正确。

也可以这样使用指针修改所指数据对象,以及访问数据对象。

指针类型大小

复制代码
注意:char和int存储的是数据范围不同的两种数据,char型占用空间小一点,int占用空间大一点。  
char*和int*存储均为数据对象的地址,它们所占的空间是相同的。

强制转化指针类型

int型指针和char型指针不能使用赋值自动转化,如果使用强制转化。

我们可以看到下面程序,强制将pn转化为char *赋值给pc,再看运行结果,两个首地址、值一致。

指针运算

指针类型地址加减规律

指针类型加n后,首地址向后移动n*步长字节。

指针类型减n后,首地址向前移动n*步长字节。

注意:取值运算符*的优先级高于算术运算符。

数组

访问数组方法

1、数组名【下标】

2、 *(数组名+偏移量) 其中偏移量表示相差元素个数

指针作为参数传递

仅有首地址的指针类型void *

类型为void *的指针仅保存首地址,不保存目标数据对象的空间大小。

void *好处:任意类型的指针都可以直接赋值给它。

相关推荐
benchmark_cc16 分钟前
REST API 和 Python SDK 应该怎么选?量化交易数据接口选型实战
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
王的宝库21 分钟前
Go 项目结构:从单文件到标准工程布局
开发语言·后端·golang
Tairitsu_H25 分钟前
[C++] 深入理解红黑树:封装set与map
开发语言·c++·set·map·红黑树·模拟实现
泡海椒39 分钟前
JQuick-Curl 性能分析:并发场景下的性能表现与调优,第三方接口调用不只要快写也要稳跑
java·开发语言·okhttp
小智老师PMP1 小时前
2026深度解析|PMP第八版与NPDP核心侧重点本质区别(管理类证书怎么选)
开发语言·分布式·算法·职场和发展·产品经理
江畔柳前堤2 小时前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native
Figo_Cheung2 小时前
Figo基于RNC理论的宇宙演化第七纪元猜想
开发语言·php
泡海椒3 小时前
JQuick-Curl 二次开发:自定义解析器、扩展点开发指南,如何把框架能力真正变成团队资产
java·开发语言·okhttp·maven
WWJA王文举4 小时前
FreeRTOS事件组和任务通知详解:为什么任务通知比队列更轻量?
开发语言·php
wuyk5555 小时前
12.归并排序:分治思想的稳定排序算法
开发语言·数据结构·算法·排序算法