C语言之指针简析

从Reset到Read:深入解析Rolling Shutter曝光流水线 本文深入解析Rolling Shutter(卷帘曝光)的工作原理,重点探讨Reset和Read信号在图像传感器中的关键作用。通过Reset-Read流水线机制,详细解释了曝光控制、时序调优及运动伪影补偿等核心技术,帮助读者理解卷帘曝光在高速摄影和动态场景中的应用。 阅读详情

C语言指针

前导程序

 View Code

 

一、基本知识点

Int a=10;

Int *p;//定义一个int类型的指针

P=&a;//指针变量p指向了变量a

*p=20;//使用指针不通过变量直接修改变量a的值为20

*p表示访问指针变量p指向的存储空间

指针一个作用:能够根据一个地址值,访问(取值 | 赋值)对应的存储空间

指针变量p前面的int,表示指针的类型

①. Int *p;

②. *p=10;

两个*的区别:前一个起标识作用,表明定义的p是一个指针,后者的*表示通过访问p指向的地址空间

 

二、指针使用注意

①. Int *p;

double d=10.0;

p=&d;//不建议此种做法

②. Int *p;

p=200;//指针变量只能存储地址

③. Int *p;

printf(“%d\n”,*p);//指针变量未经初始化,不要拿来间接访问其他的存储空间

④. Int *p=&a;但是不能写成 int *p;*p=&a;这种写法没有任何的意义,可以认为*是和类型符一起使用的。

⑤. *是指针运算符,访问指针指向的空间

 

三、指向指针的指针

Int a=10;

Int *p=&a;//指向int型的指针

Int **p1=&p;//指向指针的指针

Int ***p2=&p1;//三级指针

 

*p2相当于访问p1;

**p2相当于访问p;

***p2相当于访问a;

*p1相当于访问p;

一颗星一条线。

 

四、指针练习

编写一个函数,计算a和b的和与差(一个函数返回两个值)

提示:指针的作用之一:实现让函数拥有多个返回值

 View Code

五、有关指针的疑问

注意:任何类型的指针都占据8个字节的存储空间,那么为什么还要为指针加上类型呢?

对下面一段代码进行内存分析,可以证明指针类型不正确带来的严重后果。

Int i=2;

Char c=1;

Int *p=&c;//本应该是char类型的,写成了int类型

Printf(“c的值是%d\n”,*p);//打印结果为513,而非1

Printf(“c的值是%d\n”,c);//值为1

下面是上述代码的结果的内存分析:

 

指针p访问的本应该是1个字节空间的数据,此时因为指针的类型是int型的,因此程序自然的从指向的地址0x0a开始读取了4个字节的数据,访问的数据从1变成了513。

提示:明确了指针的数据类型,指针才能够正确的访问应该访问的空间数据。

 

六、指针和数组

Int ages[5]={10,9,8,7,6};

遍历数组

For(int i=0;i<5;i++)

Printf(“%d\n”,ages[i]);

使用指针遍历数组

Int *p;

P=ages;//也可以写成p=&ages[0];,指针变量p指向了数组的首元素

元素的地址:

第一个元素的地址p    &ages[0]

第二个元素的地址p+1    &ages[1]

第三个元素的地址p+2    &ages[2]

元素的值

*p        ages[0]

*(p+1) ages[1]

*(p+2) ages[2]

把指针当做数组来用:

For(int i=0;i<5;i++)

Printf(“%d\n”,*(p+i));

 

  (1)数组元素的三种访问形式:

①. 数组名[下标]

②. 指针变量名[下标]

③. *(p+1)

(2)指针变量的+1究竟是加多少?这取决于指针的类型,如果是char类型则加1个字节,如果是int类型的,则加4个字节。

  (3)利用指针来接收一个数组,指针变量指向了数组的首元素。

Void change(int array[])等价于void change(int *array)。

前者存储的虽然是数组元素的首地址,但是在传递时就已经变成指针了。

示例:

Void change(int *array)

{

//Printf(“%d\n”,array[2]);

Printf(“%d\n”,*(array+2));

}

Int main()

{

Int ages[5]={1,2,3,4,5};

Change(ages);

}

调用的结果为:数组的第三个元素3

若改给change(&ages[2]);则调用的结果为5,因为此时array指向的是ages[2],把ages[2]当做了array的首元素

 

七、指针和字符串

(一)基础知识

下面两行代码有着本质的区别:

①. Char name[]=“it”;

②. Char *name2=“it”;//指针变量name2指向了字符串的首字符i

 

Char name[0]=‘y’;//改变第一个元素的值

Printf(“%s\n”,name);//打印结果为yt

 

 *name2=‘y’;

Printf(“%s\n”,name2);//此时程序崩溃

这是因为,两者一个是字符串变量,一个是字符串常量。C语言的数组元素存放于栈,里面的元素可以随便修改,称为字符串变量。而字符串常量存放于常量区,会缓存起来是不可更改的。

Char *name1=“it”;

Char *name2=“it”;

Printf(“%p %p”,name1,name2);//地址是一样的,说明name1和name2指向的是同一个字符串。

 

掌握字符串定义的两种方式:

①. 利用数组

特点:字符串里边的字符是可以修改的,适用于内容需要经常修改时。

②. 利用指针

特点:其实是一个常量字符串,里面的字符不能修改,适用于字符串的内容不需要修改,且这个字符串经常被使用时。

 

(二)指针数组

整型数组:这个数组中存放的都是整型数组

指针数组:这个数组中存放的都是指针

Int ages[5];

Char *name[5]={“jack”,“rose”,“yang”};//字符串数组的常见写法

对应于:

Char name2[3][10]={“jack”,“rose”,“yang”};

保存字符串数组的两种方式:

①. 指针数组(字符串数组)

②. 二维字符数组(字符串数组)

如何输入字符串?(使用数组——因其可变)

Int main()

{

Char name[20];

Printf(“请输入姓名:\n”);

Scanf(“%s”,name);

Printf(“%s”,name);

}

 

八、返回指针的函数

程序示例:

#include<stdio.h>

Char *test();

Int main()

{

Char *name=test();

Printf(“name=%s\n”,name);

Return 0;

}

 

Char *test() //返回指针的函数

{

Return “rose”;

}

 

九、指向函数的指针

数组名即数组的地址,函数名即函数的地址。

假设有函数:

Void Test ()

{

Printf(“调用了test函数\n”);

}

Void (*p)();  //void指针变量指向的函数没有返回值,()表示p指向的函数没有形参

P=test; //有指针p,把指针p指向函数

有三种方式可以操纵函数:

①. 直接调用test();

②. 利用指针变量简介调用  (*p)();

③. 简化使用p()

 

练习:

假设有函数声明为 int sum(int a,int b)

则相对应的指向该函数的指针应该定义为:int (*p)(int ,int);

把指针变量p指向函数:p=sum;

调用该函数的三种方式:

(1)int c=p(10,12);

(2)Int c=sum(10,12);

(3)Int c=(*p)(10,12);

 

假设函数声明为:double haha(double a,char *b,int c);

则定义一个指向haha函数的指针应该为:double (*p)(double,char *,int)=haha;

如何设计ADAS系统功能状态机(一) 状态机模块在自动驾驶系统中扮演着关键的角色,它负责管理和控制各个功能的状态转换和行为执行。今天我们来聊聊如何设计自动驾驶系统的状态机。 阅读详情

相关推荐

QtNodeEditor实战:构建高效可视化编程环境的完整指南

本文是QtNodeEditor实战的完整指南,详细介绍了如何利用这一基于Qt框架的可视化编程工具构建高效节点编辑器。内容涵盖从快速集成、自定义节点模型到深入理解MVC数据流架构,并提供了样式定制、场景序列化、动态端口等高级功能的实现方法,帮助开发者快速搭建灵活、可维护的可视化编程环境。

lemon的博客 700

1.初识指针(C语言)

指针是个变量,存放内存单元的地址(编号)。 感觉这边不是太透彻,先暂放。 #include <stdio.h> int main() { printf("%d\n", sizeof(char*)); printf("%d\n", sizeof(short*)); printf("%d\n", sizeof(int*)); printf("%d\n", sizeof(double*)); return 0; } 指针类型...

yeeeeeeeee_的博客 848

MT6768平台Sensor Bring Up全流程实战:从驱动添加到问题排查(附避坑指南)

本文详细介绍了联发科MT6768平台Sensor Bring Up的全流程实战指南,从驱动添加、硬件配置到问题排查,提供了全面的避坑建议。内容涵盖环境准备、驱动文件集成、硬件接口配置、编译系统适配以及常见问题解决方案,帮助开发者高效完成传感器集成与调试工作。

weixin_30374009的博客 416

C语言指针基础

  C语言指针 前导程序 1 #include&lt;stdio.h&gt; 2 3 4 5 void change(int *); 6 7 int main() 8 9 { 10 11 int a=90; 12 13 change(&amp;a); 14 15 printf("a=%d\n",a); 16 17...

weixin_34258838的博客 219

UE4_SpeedTree Shader源码分析

目录 1.UMaterialExpressionSpeedTree::Compile 2.Compiler->SpeedTree 3.GetSpeedTreeVertexOffset 4.Scene中的SpeedTree应用 (Scene->UpdateSpeedTreeWind) 5.GetSpeedTreeVertexOffsetInner 由于之后做风场,也需要在S...

zzgyy123的专栏 2631

Verilog实现FIR滤波器

1、FIR滤波器简介 不追究FIR滤波器的深层含义,我们只关注如何实现;可以看出,FIR滤波器的本质就是延迟、系数相乘与求和,如下图: 2、设计 基于以上分析,按照三级流水实现FIR滤波器设计:信号延迟-系数相乘-求和 `timescale 1ns / 1ps module fir( input clk, input rst_n, input [3:0]din, output reg [9:0]dout ); // data reg reg [3:0]din1; reg [3:.

CLL_caicai的博客 1万+

C++中普通指针、常量指针以及指向常量的指针的用法详解

C++中普通指针、常量指针以及指向常量的指针的用法详解

创作就是最好的输出 534

从补码原理到实践:RISC-V中addi指令的符号扩展机制详解

本文深入解析了RISC-V架构中addi指令的符号扩展机制。从补码的数学原理出发,详细阐述了12位立即数在指令编码中如何通过符号位进行扩展,并结合lui指令,揭示了加载任意32位立即数的正确方法与实践陷阱,帮助开发者编写高效可靠的底层代码。

weixin_29161719的博客 139

谭浩强C++程序设计_指针习题13

【题目】 用矩形法求积分sinx  (0,1)  cos(-1,1) exp(0,2) 【程序】 #include #include using namespace std; main() { double integral(double (*p)(double),double up_limit,double low_limit); double (*p) (double);

帆哥学C++ 1556

swupdate-签名验证

swupdate加密部分具体在中可以查看。

qq_28219531的博客 1148

【ARM Trace32(劳特巴赫) 使用介绍 13 -- Trace32 Var 变量篇】

例如我们已经知道一个符号(可能是变量或者函数)的地址,怎么确定这个地址是一个变量还是一个函数呢?如果是变量的话,变量名是啥?变量定义的位置在哪?如果是函数,函数名是啥?函数定义的位置又在哪呢?查看结构体变量 str_t32 的值。例如我们已经知道了一个符号的地址为。在map文件中的地址为。

CodingCos的博客 2349

C语言之复杂指针简析

指针数组和数组指针 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。 数组指针:首先它是一个指针,它指向一个数组。在 32 位系统下永远是占 4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。 那么下边俩个分别叫做什么呢? int *p1[4]; int (*p2)[4]; ...

mmwwxx123的博客 1226

古风仙侠少女三视图提示词,一键生成角色设定

3D中国写实CG风格,CG渲染质感,精细3D建模,PBR物理材质,细腻服装纹理,电影级灯光,丰富表情,高精度场景,次世代引擎画质。平视正交视角,统一光照,纯白背景,无文字无水印,避免强透视和动态变形。3D中国写实CG风格,CG渲染质感,精细3D建模,PBR物理材质,细腻服装纹理,电影级灯光,丰富表情,高精度场景,次世代引擎画质。3D中国写实CG风格,CG渲染质感,精细3D建模,PBR物理材质,细腻服装纹理,电影级灯光,丰富表情,高精度场景,次世代引擎画质。少女,古风仙侠少女气质,灵动、温婉、仙气。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 1022

C语言指针简析&图示

指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环, 能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,

SeaSia的专栏 1645

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

c语言函数参数里有指针,C语言:在函数参数中传递指针的指针简析

这是道哥的第013篇原创前言今天同事问了一个问题:在函数参数中传递指针的指针,很常用的一个场景,重新梳理一下记录于此,以后如果有类似的问题直接发这篇小总结就可以了。代码:版本1void do_malloc(char *p, int size){ p = (char *)malloc(size + 1); memset(p, 0, size + 1);}int main(int argc...

weixin_36084613的博客 1229

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[C语言作业] 数组指针

哈希映射:把数组元素的值当作计数数组的下标;第一次遍历:统计每个数字出现频次;第二次遍历哈希数组,筛选频次 = 1 的数值;

2503_92107148的博客 160

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C语言——指针

C语言——指针

weixin_59796310的博客 11万+

死磕C语言指针

兜兜转转还是逃不过 C 语言,这该死的缘分。 先看一眼我的西野七濑 学习自:https://zhuanlan.zhihu.com/p/89121683 目录 1 指针 1.1 指针是乜嘢 1.2 指针的声明 1.3 运算符 1.4简单的小例子们: 例子1 例子2:指针在函数间通信 1.5 指针的运算 1.5.1 指针加减运算 1.5.2 间址运算 1.5.3 指...

闲狗的博客 2万+

c语言—指针详解

文章目录一、指针是什么二、指针和指针变量1.左值与右值2.两者的区别1.指针2.指针变量3.如何使用三、指针和指针类型 一、指针是什么 指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。 指针就是地址,地址就是指针。 使用指针的目的是提高使用效率 二、指

Welcome to my blog. 2万+

c语言 指针

目录c语言 指针c语言 指针概念c语言 指针大小c语言 指针类型的意义 c语言 指针 c语言 指针概念 指针是个变量,存放内存单元的地址(编号)。 #include <stdio.h> int main() { int a = 10; // 在内存中开辟一块空间,存储10 int* p = &a; // 这里我们对变量a,取出它的地址,可以使用&操作符。 //将a的地址存放在p变量中,p就是一个之指针变量。 return 0; } c语言 指针大小 指针的大小在32位平

qq_43192537的博客 5318

指针c语言有什么作用,c语言中指针有什么用?

一、什么是指针C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也就是说:指针是一种保存变量地址的变量。前面已经提到内存其实就是一组有序字节组成的数组,数组中,每个字节大大...

weixin_42515781的博客 9107

C语言的指针

指针(pointer)是C语言最重要的(有时也是最复杂的)概念之一,是一个值为内存地址的变量,用于存储变量的地址。指针的第一个基本用法就是在函数间传递信息。概括地的说,如果主调函数不使用return返回的值,则必须通过地址才能改变主调函数(Main函数)中的变量值。

把酒送清风的博客 3464

c语言指针是什么

计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用 4 个字节,char 占用 1 个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份证号一样,每个字节的编号是唯一的,根据编号可以准确地找到某个字节。 下图是 4G 内存中每个字节的编号(以十六进制表示): 我们将内存中字节的编号称为地址(Address)或指针(Pointer)。地址从 0 开始依次增加,对于 32 位环境,程序能够使用的内存为 4GB,最小的地址为 0,最大的地址为 0XFFF

顺其自然~专栏 4819

【C语言进阶】C语言指针的高阶用法

相信大家当初学习C语言的时候,老师一定跟你说过这样的一句大实话:【指针,是C语言的灵魂】。

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 9294

【C语言】指针

C语言中的指针是一种特殊的变量,它存储的是另一个变量的内存地址。

小明的博客 1517

C语言——初始指针

文章目录C语言——初始指针指针是什么指针和指针类型野指针指针运算 C语言——初始指针 指针 本章重点 1.指针是什么 2.指针和指针类型 3.野指针 4.指针运算 5.指针和数组 6.二级指针 7.指针数组 指针是什么 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向变量单元。因此,将地址形象化的成为指针。意思是通过它能找到以他为地址的内存单元。 我们可以这样理解: 内存:

qq_59702185的博客 3646
上一篇: C语言之字符串
下一篇: iOS 开发之常用框架
Shicuf
博客等级 码龄16年 11粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值