C语言各类指针概念

C语言中各类指针的用法(小结) 主要介绍了C语言中各类指针的用法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 立即下载

C语言中有很多关于指针的使用,指针也是C语言的灵魂所在,而且C语言中也有很多有关指针的概念,这里学习并总结了一些知道的概念。

 

常量指针:

首先它是一个指针,常量只是用来修饰指针的定语。其定义如下:

char const * cp;
char a='a';

如何识别呢?根据右结合优先,先是*优先,所以这个cp变量是一个指针,然后是const修饰*,所以这是一个常量指针。即指向常量的指针。

cp=&a;  //正常语法
*cp=a;  //错误语法,因为其指向的值是一个常量


 

指针常量:

首先它是一个常量,指针是用来修饰常量的,即常量的值为一个指针地址。

 

char * const cp;
char a='a';

如何识别呢?根据右结合优先,先是const优先,所以这个cp变量是一个常量,然后是*修饰const,所以这是一个指针常量。

cp=&a;  //错误语法,因为其地址为是一个常量

*cp=a;  //正确,地址所指向的内容是一个普通字符


 

指针数组:

首先它是一个数组,指针是用来修饰数组内容的,表示什么样的数组 :即存放指针的数组

char *arr[3] = {"1","123","345"};

如何识别,因为[]的优先级大于*,所以先是定义为一个数组,而后由*来修饰这个数

printf("arr0%c\n",*arr[0]);
printf("arr1%s\n",arr[1]);

 

数组指针:

首先它是一个指针,数组是修饰指针的,即指向数组的指针。

char (*p)[3];   //申明时不能同时初始化
char arr[3] = {'1','4','7'};
p=&arr;  //指向数组的首地址,同时指针的类型是char * [3] 类型的,即加1操作后为sizeof(char [3])三个字节数

如何识别:因为这次添加了一个显示优先,所以这次先是一个指针,而后[]修饰指针

printf("%c\n",(*p)[0]);   //先取arr的首地址,再根据这个地址取数组内容
printf("%c\n",(*p)[1]);
printf("%c\n",(*p)[2]);
printf("%c\n",*((char*)p+0));  //先转换为char指针,再取值
printf("%c\n",*((char*)p+1));
printf("%c\n",*((char*)p+2));
printf("%c\n",((char*)p)[0]);  //先转换为char指针,再取数组的值,和第一个类似
printf("%c\n",((char*)p)[1]); 
printf("%c\n",((char*)p)[2]); 


函数指针:

首先它是一个指针,函数是修饰指针的,即指向函数的指针。

	char (*func)(void);  //定义函数指针
	char test(void) 
	{
	return 'A';
	}
	func = test;   //初始化赋值
	printf("test address: %p\n",test);
	printf("func address: %p\n",func);
	char ch = func();   //调用
	printf("%c\n", ch);

如何识别,同数组指针一样,因()的优先级,所以这个定义首先是一个指针,而后才是对指针的描述,即一个指向函数的指针,其指向的函数也是规定的:即返回的是字符类型,不需要传入参数

 

 

指针函数:

首先它是一个函数,指针修饰函数的返回类型,即一个返回指针的函数

 

char *func(void);
如何识别,因为没有扩弧,所以*的优先级没有右边的扩弧优先级高,所以先是规定了一个函数,*只是修饰返回值的

 

char *func(void) {
   char *str = "test";
   return str;
 }
 void main() {
   char *test = func(); 
   printf("%s\n",test); 
}

 

 

结构体指针:

当然其原先也是一个指针,只不过就是指向了结构体而已。故而为结构体指针。


 

指针结构体:

指针结构体,其实也没有必要有这个概念,无非就是带有指针作为子项的结构体。


 

指针类型转换:

指针类型转换是个有意思的东西,你可以把一个int型的指针转换为char类型,然后再把char类型的指针转换为int型;就像普通的字符和int型之间的转换一样。但指针转换后其值没有变,唯一变的东西就是指针的步长,即进行指针运算时的计算方式。当为char指针时其运算单位均以1个字节为1个运算单位,而当为int指针时通常都是以4个字节为1个运算单位。

 

指针算术:

根据上面的指针类型转换介绍可知,不同的指针类型进行算术运算时其计算方式时不相同的,其不同之处就在于其步长的字节数不同,而具体其步长为几个字节数是以其指针类型决定的,指向char的指针步长即为1。通常的指针运算有指针与数字的加减运算,相同类型的指针的减法运算,而且还要是指向同一个数组的,不然意义不大。同理推得不同类型的指针进行运算意义更不大,甚至会报错。

 

指针参数:

指针参数就是指,指针作为函数的参数进行传递,因为C语言只支持单向传值,且返回值只能是一个值类型,所以想要从函数内返回多个内容或者与函数体有一个共同的数据操作区域,那这个时候就可以考虑通过传指针参数的方式了。传指针也是传值,只不过这时的值为指针指向的地址,也就是一个int整数。通过传递一个地址后就可以对一个共同的区域进行操作和数据共享了。

 

指针指针:

指针的指针就是指向指针的指针,同理还有指向指针指针的指针;不过一般人的思维能做二级、三级的指针的就很好了。这里主要是扩展一下指针与多维数组的关联关系。从个别到一般来分解多维数组的处理。这里个别肯定是用二维数组来举个例子,那就可以延伸到多维数组。

 

SSCardDriver.dll社会保障卡读写终端接口规范38号文接口 ********************获取设备及PSAM卡信息********************//********************获取银行账户信息 ********************//********************获取设备信息********************//********************PIN校验********************//********************通用写卡********************/ 阅读详情

相关推荐

数字IC后端时序违例修复:setup/hold冲突与时钟树优化实战

时序收敛是数字IC后端设计中最关键的环节之一,直接影响芯片能否在目标频率下稳定工作。建立时间与保持时间的本质是寄存器对数据稳定性的物理约束,而实际工程中,setup违例和hold违例往往此消彼长,冲突的根源在于数据路径与时钟路径的延迟匹配。时钟树综合(CTS)作为连接逻辑与物理的关键步骤,其skew、insertion delay和transition的优化直接决定了时序修复的成败。通过useful skew技术、合理的单元替换和路径结构调整,可以系统性地解决setup/hold冲突,实现时序收敛。本文结合

weixin_28292761的博客 224

C语言指针类型详解(建议收藏)

指针是内存中一个最小单元的编号,也就是地址(以字节为单位,每一个字节的存储单位具有一个地址)。指针变量是用来存放内存地址的变量;可以通过取地址符&取出某一变量(字符型、整型、数组类型等)的起始地址存放在指针变量中。经常将指针变量称为指针。注意区分:指针变量的大小即地址的大小取决于计算机是32位还是64位;对于32位的计算机,有32根地址线,在寻址时产生32个0或1;

B19276363838的博客 2773

VS2015+Qt+OpenCV+open62541开发过程(05_VS2015中使用OPCUA open62541通过Kepware读写PLC数据)

此外还需要所需lib包:WS2_32.Lib(opcua通讯用到的库,opcua使用socket通讯,需使用此库),添加#pragma comment(lib,"ws2_32.lib") 语句,有的文章说需要添加ws2_32.lib文件或ws2_32.dll到项目资源中,貌似影响不大。2.在VS中选择x64平台会报错,选择x86平台可以用,应该是ws2_32.lib相关的库不支持64位,目前没有解决,继续后面的实验,看看用Qt后是否可以解决。6.VS中建立的变量,与读取的OPC点数据类型注意对应。

zzh17的博客 1862

C/C++中各类常见指针,裸指针,野指针,空指针,智能指针,悬空指针

概述c/c++中各类指针

goodgood_UP的博客 1757

RK3588-NANOPC-T6移植ubuntu+xenomai内核

更具网址下载相应的内核。导入到开发板并执行内核。

qq_42007446的博客 574

Scrapy实现微博关键词爬虫(爬虫结果写入mongodb)

话不多说,上代码: spiders文件夹下的microBlogSpider.py里这样写: # -*- coding: utf-8 -*- import scrapy from scrapy import Spider, Request, FormRequest from scrapy.selector import Selector import datetime import random from blogSpider.items import microBlogItem, keyWordItem f

qq_39360565的博客 1779

C语言指针详解(1)------指针类型(简单例子+详细讲解)

此文介绍了C语言中常见的6种指针,对每种指针进行了介绍,并举出相应的例子供大家理解学习.

qq_57425280的博客 3636

手把手教你用Ubuntu Base 20.04打造轻量级ARM开发板根文件系统(附常见问题解决)

本文详细介绍了如何基于Ubuntu Base 20.04 LTS构建轻量级ARM开发板根文件系统,涵盖环境准备、镜像制作、跨架构配置、软件包定制及常见问题解决。通过实战指南,开发者可快速掌握ARM架构下的根文件系统构建技巧,优化系统性能并解决部署中的典型问题。

gin88的博客 211

C语言中的几种指针

下面举例说明几种不同的指针类型: 一、指针变量 格式: 类型名 *指针变量名; int *p; 二、一维数组与指针变量 int *p; int a[10]; p=a; //数组名代表首地址,且是一个地址常量 三、多维数组与指针变量 int a[3][4]; a+1是跳过一行。 因为二维数组名是行指针, 加1是跳过一行不是一个元素 切记: 1、只有列指针才是“真正” 指向元素.........

BLAZAR' 2169

高频功率放大器的设计实现

摘 要 随着无线通信技术的高速发展,市场对射频电路的需求越来越大,同时对射频电路的性能要求也越来越高。高频功率放大器是位于无线发射级末端的重要部件,为了弥补信号在无线传输过程中的衰耗,要求发射机具有较大功率的输出,通信距离越远,要求的输出功率越大。在高频范围内,为了获得足够大的高频输出功率,就要采用高频功率放大器。 本次课程设计的高频功率放大器的技术指标包括输出功率、效率、功率增益、由于高频频功率放大器的输出功率比较大,耗能比较多,所以工作效率就显得比较重要。本课程设计的高频功率放大器电路由两极功率放大器

qq_43543515的博客 3万+

Mathematica 训练课(12)常用注释方法

Mathematica从入门到进阶

qq_25018077的博客 9075

C语言中多种指针相关类型详解

目录 指针数组 数组指针 arr与&arr的区别 数组指针 1.数组指针的创建格式: 2.数组指针的用处 数组参数,指针参数 一维数组传参 二维数组传参(注意事项) 一级指针传参 二级指针传参 函数指针 函数指针数组 指针数组 指针数组是指在一组数中能够存放多个相同指针类型的一组数 指针数组的书写格式: int* * *arr[5];——存放int *类型的数组 char* ch[10];——存放char *类型的数组 int** pp[5];——存放int**

Green_756的博客 1554

ZED双目相机环境配置

ZED SDK 安装文件夹中有一个 Python 脚本(get_python_api.py),可以自动检测操作系统、CUDA 和 Python 版本并下载相应的预编译 Python API 包(pyzed)。安装SDK成功后,我们进入ZED SDK文件夹中的tools子文件夹,运行ZED Explorer.exe 以及 ZED Depth Viewer.exe,查看ZED相机是否能正常启用工作。在本例中,我们简单地检索ZED相机的序列号:打开 ZED相机,然后打印其序列号,然后关闭相机。

qq_53545309的博客 2144

C语言——进阶指针理解

函数调用约定定义了函数在调用过程中参数传递、堆栈管理和返回值处理的规则。它确保了调用方(Caller)和被调用方(Callee)对函数调用的底层细节达成一致,避免因规则不匹配导致的程序崩溃或数据损坏。

Dfuen的博客 961

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

c语言进阶 指针

指针数组是一种特殊的数组,其核心特点在于每个数组元素都是一个指针变量,这些指针可以指向不同的数据类型。&arr的存储类型&arr(*p)表示 p 是指针(*p)[5]表示 p 指向包含 5 个元素的数组表示数组元素为 int// 正确:p是指向包含5个int的数组指针// 正确:p1指向首元素(类型int*)// 错误:类型不匹配(int* 与 int (*)[5])// 错误:必须指定数组大小int* p1[5];// 指针数组:包含5个int*的数组。

ztztz111的博客 1729

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C语言的指针

1.简单的指针变量数据类型指针变量名;int* p;//定义了一个指针变量p在 定义指针变量的时候是用来修饰变量的,说明变量p是个指针变量。变量名是p2.关于指针的运算符。

a15884871479的博客 618

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C语言学习之指针总结

C语言的灵魂在于指针,对于初学者来说,对这个灵魂了解的更大程度上体现在难度上,但是实际上也仅仅是由于不熟练,只要学完过后,看几个例子,跟着写几段代码,就会发现其实指针和数组,循环,分支语法之类的运用难度上差不了很多(虽然数组的本质就是指针)。所以,要对自己有信心!接下来正文开始。

aacd2719的博客 2194

【C语言系列】从0到1的指针详解——让你看破指针的奥秘

我们首先要了解指针的概念,明白变量在内存中的存储情况。在存储的过程当中,内存被一块块的分配好,每一块都有着自己独特的编号,而这个编号就是所谓的指针,当它存放到一个变量当中时,指针变量就由此诞生。

qq_74411357的博客 802

C语言 指针 & 格式字符串

学习指针是理解C语言的重要部分。总之,学习指针需要时间和实践。通过掌握基本概念、声明和初始化、类型、运算、应用等方面,你将能够更好地理解和使用指针。

Darling_Zzzzzzz的博客 311

C语言基础之指针

p为20的内存地址即**&num***p = 20p = &num注意:如果对num的地址取地址,即**q == *p == 20,那么 * q == p == &num*修饰指针变量名( * p)保存谁的地址 就先定义谁。1 定义一个指针变量p 保存 int num的地址;int *p;2 定义一个指针变量p 保存数组int arr[5]首地址;3 定义一个指针变量p 保存函数的入口地址 int fun(int,int);

qq1074237849的博客 1220

【C语言】指针类型的总结

普通指针、野指针、无符号型指针、二级指针、文件指针、函数指针、结构体指针、数组指针、指针数组

志之所趋,无远弗届,穷山距海,不能限也 1338

C语言——指针

在C语言中创建变量其实就是向内存申请空间,例如:这里就是创建了整型变量a,向内存申请了4个字节来存放整数1,每个字节都有一个地址,也就是上方图片右侧的0x008FF97C、0x008FF97D、0x008FF97E和0x008FF97F。那么我们如何得到a的地址?这里就得学习一个操作符&,取地址操作符,&a取出的是a所占4个字节中地址较小的字节的地址,上述例子中,我们就获得了变量a中的第一个字节地址0x00AffB0C。

Exile_iliora的博客 1064

C语言—指针应用解析

一.指针介绍 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。 #include<stdio.h> #include<stdlib.h> // //一级指针的定义 int main() { int a = 10; int* p = &a; printf("%d\n", *p);//指针p存放着a的地址,通过解应用找到p所指向空间的值 system...

weixin_42357849的博客 220

一文搞懂C语言中指针数组、数组指针、函数指针、指针函数

一文搞懂C语言中指针、数组、指针数组、数组指针、函数指针、指针函数 1.背景 阅读redis源码,初始化流程-创建并初始化服务器数据结构中(initServer) // 设置信号处理函数 signal(SIGHUP, SIG_IGN); signal(SIGPIPE, SIG_IGN); signal函数 #include<signal.h> // signal函数原型 void (*signal (int sign,void (*)(int)))(int); // second vers

GeekDengshuo 302

深入理解C语言指针

详细介绍了对C语言指针的理解

Elaborate51376的博客 1155

C语言 复杂指针的申明问题 数组指针 指针数组 函数指针 指针函数一览无遗! C/C++求职面试必备考点(四)

首先,看如下8个题,如果您能不看任何资料的情况下做对。那么恭喜您,这块应该基本没问题了。因为再复杂的组合都是从这上面8种里变出来的。 1,定义一个整形数 2,定义一个指向整形数的指针 3,定义一个指向指针的指针,它指向的指针,是一个指向整形数的指针 4,定义一个具有10个整形数的数组 5,定义一个具有10个指针的数组,这些指针都是指向整形数的 6,定义一个指向有10个整形数 数组的指针

大磊大的专栏 1434
上一篇: C语言交换两个变量值不利用额外变量
下一篇: HTTP协议之multipart/form-data请求分析
上帝De助手
上帝De助手 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄19年 1494粉丝 215原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上帝De助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值