C语言 --- 指针

目录

[1. 概念](#1. 概念)

[2. 指针变量初始化](#2. 指针变量初始化)

[2.1 被调修改主调](#2.1 被调修改主调)

[2.2 指针变量的引用](#2.2 指针变量的引用)

[3. 指针 + 一维整型数组](#3. 指针 + 一维整型数组)

[3.1 指针的运算](#3.1 指针的运算)


1. 概念

指针就是地址 --- 内存单元的编号

指针也是一种数据类型 --- 这种数据类型专门用来处理地址这种数据

语法:

复制代码
基类型 * 指针变量名

(1)基类型:就是结构体类型,表示该指针所指向的内存空间存放什么类型的数据

(2)* :表示此时定义的是一个 指针类型 的变量

(3)指针变量名:符合标识符命名规则

2. 指针变量初始化

如果指针变量没有初始化,此时是随机值。---- 野指针

初始化可以让指针变量有明确指向。

赋值:

复制代码
int a = 10;
int *p;
p = &a;    // p指向a,因为p中保存了a的地址

int *p = NULL;   // NULL 0号地址---空指针


int *p,q;  // p是指针类型,q是int型

int *p,*q  // 此时表示定义了两个int*类型的变量p,q

2.1 被调修改主调

(1)指针作为函数参数

形参 --- 指针类型变量,用来接收实参

实参 --- 要修改谁就把谁的地址传过去 要保证空间有效

注:被调函数中必须要有 *p 运算

(2)值传递和地址传递

值传递 --- 只是实参数据赋值了形参

地址(指针)传递 --- 传的是地址 -- 可以实现被调修改主调

eg:实现两个数求和,通过参数带出来

复制代码
#include<stdio.h>

void  ADD(int a,int b,int *sum)
{
    *sum = a+b;
}

int main(void)
{
    int x=10;
    int y=2;
    int sum;
    ADD(x,y,&sum);
    printf("%d\n",sum);
    return 0;
}

2.2 指针变量的引用

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

(1)间接访问

(2)通过a访问 --- 直接访问

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

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

step3: 将偏移出的这块空间,当做一个基类型变量来看

3. 指针 + 一维整型数组

数组名就是数组首元素的地址。

数组名是个常量,不能做自增自减运算。

复制代码
int *p = a;            //p 指向了数组a。
a <=> &a[0]

void printArray(int *a,int len)   // 数组作为函数参数,实参传数组名

3.1 指针的运算

p+1 加n 表示跳过n个基类型

p-1

p++

p--

不能运算p+q

p - q 表示差了多少个元素(基类型)必须是同一类型的指针

*(p+i)<=> a[ i ] <=>*(a+i)

相关推荐
blackA_6 分钟前
Javaweb学习——day3(Servlet 中处理表单数据)
学习·servlet
huangyuchi.13 分钟前
【Linux】初见,进程概念
linux·服务器·操作系统·进程·进程管理·pcb·fork
thinkMoreAndDoMore15 分钟前
linux驱动开发(9)- 信号量
linux·运维·驱动开发
梦境虽美,却不长30 分钟前
数据结构 学习 图 2025年6月14日 12点57分
数据结构·学习·
哆啦A梦的口袋呀1 小时前
基于Python学习《Head First设计模式》第十一章 代理模式
学习·设计模式·代理模式
五阿哥爱跳舞1 小时前
【环境配置】解决linux每次打开终端都需要source .bashrc文件的问题
linux·运维·服务器
Samesky0012 小时前
Oracle数据库学习笔记 - 创建、备份和恢复
数据库·学习·oracle
网易独家音乐人Mike Zhou2 小时前
【Linux应用】Linux系统日志上报服务,以及thttpd的配置、发送函数
linux·运维·服务器·mcu·物联网·嵌入式·iot
Eric.Lee20212 小时前
ubuntu 系统 多条命令通过 bash 脚本执行
linux·ubuntu·bash
程序员打怪兽2 小时前
线程间数据传递机制详解(共享全局内存 + 互斥锁同步)
linux·嵌入式