news 2026/5/16 8:20:04

day14 C语言 指针2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
day14 C语言 指针2

10.指针的常见操作

1.指针变量有两方面的意思:

  1. 一个是指针指向的内容(数据值,一级指针)
  2. 一个是指针变量本身存储的数据(地址值)

2.赋值运算符的左右值

  1. p做左值:对指针变量本身进行修改 存储某个变量的地址
  2. p做右值:把p指向的地址,赋值给另一个指针,这两指针指向同一个变量
  3. *p做左值:对指针指向的变量写入数据
  4. *p做右值:读出指针指向的变量的数据

eg:

#include<stdio.h>

int main()

{

int a=20;

int b=0;

int c=40;

int *p=NULL;

int *q=NULL;

p=&a; //对指针本身进行修改 改变指针指向

//对指针指向的数据(内容)进行操作

b=*p; //通过地址获取地址中的数据 ,对a变量的读取

*p=30;//把需要写入的数据 通过地址写入a变量

p=&c;//p变量本身发生变化,改变指针的指向

b=*p; //对变量c进行读取操作

*p=100;//对变量c进行写入操作

q=p; //把p指向的地址,赋值给q,p、q指向同一个变量。多个指针可以指向同一个变量

return 0;

}

11.指针作为参数,传参

1.函数传递参数

  1. 值传递:在主调函数中,实参;在被调函数中,形参。形参可以读取实参的内容,但是不能修改实参的值。
  2. 地址传递:在主调函数中,实参;在被调函数中,形参。形参可以通过间接访问的方式 读实参的内容。实参和形参都是指针,这两个指针中存储的地址值 是同一个变量的地址。

2.函数使用指针作为参数的情况

  1. 需要形参修改实参的情况,需要被调函数修改主调函数中参数的值
  2. 函数的返回值只有一个。在被调函数中需要返回多个数的话,就需要传递指针。因为被调函数可以修改主调函数的参数的值。

eg1:形参修改实参

#include <stdio.h>

void swap(int a, int b) //值传递

{

int t = 0;

t = a;

a = b;

b = t;

}

void swap2(int *pa, int *pb) //地址传递

{

int t = 0;

t = *pa;

*pa = *pb;

*pb = t;

}

int main()

{

int a = 1;

int b = 3;

// swap(a,b);

swap2(&a, &b);

printf("a is %d,b is %d\n", a, b);

//指针可以指向0-4G任意地址。但是不一定能读写,内存有保护机制。

//(int*)0x2000 强制类型转换 把2000不当数字看 当地址看

int *p = (int *)0x2000;

}

eg2:被调函数中需要返回多个数

#include<stdio.h>

int func(int a,int b,int*sum,int *sub)

{

*sum=a+b;

*sub=a-b;

return 0;

}

int main()

{

int a=10;

int b=20;

int sum=0;

int sub=0;

func(a,b,&sum,&sub);

printf("a is %d, b is %d, sum is %d, sub is %d",a,b,sum,sub);

}

12.指针和数组的关系

  1. 数组名是一个指向数组第一个元素的指针常量。数组名是数组首元素地址的别名,并没有开8byte空间 ,是一个指针常量(指针本身的值不能发生变化,指针保存的地址不能发生变化)

eg: int a[10];对于数组名a来说可以把它想成一个指针变量。本质,a是数组中第一个元素的别名。

a=&a[0]

  1. 数组名的类型:

int a[]; 类型 int []; int []约等于int *

int []约等于int * ;C语言中,兼容类型;大部分情况下可以相互替换(都存了变量地址),但也有例外。

不同点:

  1. sizeof():

int *-->8byte ; int a[20]-->20*sizeof(int) 80byte

  1. 在执行取地址操作时:
  1. int *->&(取地址)->int **(二级指针,地址的地址)
  2. int a[10]->&(取地址)->int (*p)[10](数组指针)
  1. 一维整形数组做参数

int fill_array(int *a,int size) //填充

//int fill_array(int a[],int size)

{

int i=0;

// for(i=0;i<size;i++)

// {

// a[i]=rand()%50;

// }

for(i=0;i<size;i++)

{

*(a+i)=rand()%50;

}

return 0;

}

int show_array(int a[],int size) //显示

{

int i=0;

for(i=0;i<size;i++)

{

printf("%-5d",*(a+i)); //a+i->int* ; *(a+i) ==a[i] int

//printf("%-5d",*(a++)); // *a++ 优先级 * > ++

}

// while(i<size)

// {

// if(0==i%5)

// {

// printf("\n");

// }

// printf("%d\t",*(a+i));

// i++;

// }

printf("\n");

return 0;

}

  1. 一维字符数组做参数

void show_str(char *a)

{

int i=0;

// while('0'!=a[i])

// {

// printf("%c",a[i]);

// i++;

// }

// printf("\n");

// while ('\0'!=*(a+i))

// {

// printf("%c",*(a+i));

// i++;

// }

// printf("\n");

while ('\0'!=*a)

{

printf("%c",*(a++));

}

printf("\n");

}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 8:19:06

Windows11系统 26H1 X-Lite V3 精简纯净版 安装全流程

一、前言 原版 Windows 11 开机内存占用普遍在 3–4GB&#xff0c;后台进程多、广告推送频繁&#xff0c;且存在严格的 TPM、CPU、内存硬件限制&#xff0c;老旧设备难以流畅运行。Windows X‑Lite 26H1 V3 由海外 FBConan 团队基于 Windows 11 26H1&#xff08;Build 28000.1…

作者头像 李华
网站建设 2026/5/16 8:18:05

Redis点评项目--- Chapter one 用户短信登录(redis)

(封面: 中西部情绪)1.发送验证码核心逻辑比较简单&#xff0c;如图验证码使用的UUID模拟的验证码&#xff0c;用户需要参传入对应的手机号码。当用户点击获取验证码之后我们需要将其存入redis缓存当中&#xff0c;后续用作验证码比对&#xff0c;以免用户后续更换手机号使用原先…

作者头像 李华
网站建设 2026/5/16 8:17:05

基于MCP与ADB实现AI智能体远程控制安卓手机的实践指南

1. 项目概述&#xff1a;当你的手机成为AI的“眼睛”与“双手” 最近在折腾AI智能体&#xff08;Agent&#xff09;的时候&#xff0c;我一直在思考一个问题&#xff1a;如何让这些运行在云端或本地电脑上的“大脑”&#xff0c;能真正感知和操作我们物理世界里的设备&#xf…

作者头像 李华
网站建设 2026/5/16 8:15:22

联盟营销实战技能体系:从市场研究到数据优化的完整盈利框架

1. 项目概述&#xff1a;从“联盟营销技能”到实战工具箱看到“Affitor/affiliate-skills”这个项目标题&#xff0c;我的第一反应是&#xff1a;这绝不是一个简单的教程合集。在联盟营销&#xff08;Affiliate Marketing&#xff09;这个领域摸爬滚打了十几年&#xff0c;我深…

作者头像 李华
网站建设 2026/5/16 8:14:35

GPTPortal:基于模型抽象层的AI应用快速部署与统一管理平台

1. 项目概述&#xff1a;一个面向开发者的AI应用快速部署门户 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫GPTPortal。乍一看名字&#xff0c;可能会让人联想到某个特定的AI模型服务&#xff0c;但深入了解一下就会发现&#xff0c;它的定位其实更偏向于一个“门户”或…

作者头像 李华
网站建设 2026/5/16 8:14:22

HyperBus接口技术解析与高性能NOR闪存应用

1. HyperBus接口&#xff1a;重新定义高性能NOR闪存的标准在嵌入式系统设计中&#xff0c;NOR闪存因其快速启动和可靠的数据存储特性&#xff0c;始终占据着关键地位。记得2016年参与汽车电子控制单元开发时&#xff0c;我们曾为选择存储器接口而头疼——传统并行NOR接口需要占…

作者头像 李华