首页 > 其他分享 >c语言 *p和**p的区别

c语言 *p和**p的区别

时间:2024-04-18 14:45:43浏览次数:24  
标签:语言 变量 指向 区别 int 地址 内存地址 指针

前言:

先要理解地址和数据,你可以想象有很多盒子,每个盒子有对应的号码,那个号码叫做“地址”,而盒子里放的东西叫做“数据”。
上面就段理解了,p和p的区别就不难解释了。
p是指针变量,用来存放地址,你可以认为是上面所说的盒子的号码,“ * ”是解引用操作符,你可以把它理解成打开盒子,
p就是打开p号盒子,取出里面的数据。
简单来说,你记住,p存放的是地址,而*p是让程序去那个地址取出数据。

在C 语言中*号有三个用途,分别是:

  1. 乘号,用做乘法运算,例如5*6。
  2. 申明一个指针,在定义指针变量时使用,例如int *p;。
  3. 间接运算符,取得指针所指向的内存中的值,例如printf("%d",*p);。

总结:

假设我们定义一个指针p。
那么会经常使用到三个符号:
1,p;
2,*p;
3,&p;
初学者经常会感到很迷茫,到底这三个符号表示什么?

p是一个指针变量的名字,表示此指针变量指向的内存地址,如果使用%p来输出的话,它将是一个16进制数。

*p表示此指针指向的内存地址中存放的内容,一般是一个和指针类型一致的变量或者常量。 而我们知道,&是取地址运算符,&p就是取指针p的地址。

等会,怎么又来了个地址,它到底和p有什么区别?

区别:指针p同时也是个变量,既然是变量,编译器肯定要为其分配内存地址,就像程序中定义了一个int型的变量i,编译器要为其分配一块内存空间一样。

&p就表示编译器为变量p分配的内存地址,而因为p是一个指针变量,这种特殊的身份注定了它要指向另外一个内存地址,程序员按照程序的需要
让它指向一个内存地址,这个它指向的内存地址就用p表示。而且,p指向的地址中的内容就用*p表示。

*p和**p的区别

int* p :一级指针,表示p所指向的地址里面存放的是一个int类型的值, 用于解引用一个指针,访问其直接指向的值,或者用于声明一个指向某种数据类型的指针变量。
int** p :二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针, 用于解引用一个二级指针,即先得到一个中间指针,再通过这个中间指针访问最终的值,或者用于声明一个指向指针的指针变量。)
例如:

int i=10; //定义了一个整型变量
int *p=&i; //定义了一个指针指向这个变量
int **p1=&p; //定义了一个二级指针指向p指针
那么取出10的值方式为:
printf(“i=[%d]\n”,*p);  //输出结果 10  
printf(“i=[%d]\n”, **p1); //输出结果 10

标签:语言,变量,指向,区别,int,地址,内存地址,指针
From: https://www.cnblogs.com/kkbk/p/18143464

相关文章

  • c语言程序实验——实验报告六
    c语言程序实验————实验报告六实验项目名称:实验报告6循环结构程序设计(for语句的应用)实验项目类型:验证性实验日期:2024年4月15日一、实验目的1.熟练掌握三种循环语句并能正确运用;2.能够用循环实现一些常用算法,如穷举法,迭代法,递推法等;3.进一步学习程序调试;4.了解......
  • c语言程序实验——实验报告五
    c语言程序实验————实验报告五实验项目名称:实验报告5循环结构程序设计(while、dowhile语句的应用)实验项目类型:验证性实验日期:2024年4月11日一、实验目的1.熟练掌握三种循环语句并能正确运用;2.能够用循环实现一些常用算法,如穷举法,迭代法,递推法等;3.进一步学习程......
  • 34-Java反射获取对象成员属性,getFields()与getDeclaredFields()方法的区别
    需求:在开发过程中,经常会遇到的一个问题是,需要判断某个字符串是不是对象的某个成员属性名,然后根据判断结果去操作这个成员属性参考教程:Java反射获取对象成员属性,getFields()与getDeclaredFields()方法的区别_javadeclaredfields-CSDN博客 可以通过以下方法:getFields(): 获......
  • 【python】使用r+模式先读后写和先写后读的区别
    最近学习python时,发现r+(读写)模式先读和先写,写入的位置不一致,经过测试发现:1、先写后读,写从文件开头开始写(覆盖原文),读从写入末尾开始读;2、先读后写,读从文件开头开始读,写从文件末尾开始写。点击查看代码'''test.txt#####随便写点啥######'''#先写后读withopen('test.txt......
  • KG2Instructions 和 KG2Prompts 将知识图谱转换为自然语言提示
     KG2Prompts是什么?KG2Prompts是一个用于将知识图谱转换为自然语言提示的工具。它使用预训练的语言模型来生成提示,这些提示可以用于各种任务,例如文本生成、问答和摘要。KG2Prompts的工作原理如下:首先,它将知识图谱转换为一个图结构,其中节点代表实体,边代表实体之间的关系。......
  • v-bind和v-model的区别
    v-model与v-bind区别:1、v-bind是单向绑定,用来绑定数据和属性以及表达式,只能将vue中的数据同步到页面。2、v-model是双向绑定,不只能将vue中的数据同步到页面,而且可以将用户数据的数据赋值给vue中的属性。3、v-bind可以给任何属性赋值,v-model只能给具备value属性的元素进行数据双......
  • Git reset 中四大模式:soft、mixed、hard、keep 的区别
    Gitreset中四大模式:soft、mixed、hard、keep的区别目录Gitreset中四大模式:soft、mixed、hard、keep的区别gitreset--soft(常用)gitreset--mixed(默认)gitreset--hard(慎用)gitreset--keep(吃灰)参考工作区暂存区本地版本库soft保持所有保持回退mixed保......
  • NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据|附代码数据
    全文链接:http://tecdat.cn/?p=2155最近我们被客户要求撰写关于NLP自然语言处理的研究报告,包括一些图形和统计输出。随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带。领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的时......
  • 数据分享|R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据|附
    全文链接:http://tecdat.cn/?p=22813最近我们被客户要求撰写关于混合效应的研究报告,包括一些图形和统计输出。本教程为读者提供了使用频率学派的广义线性模型(GLM)的基本介绍。具体来说,本教程重点介绍逻辑回归在二元结果和计数/比例结果情况下的使用,以及模型评估的方法本教程使用......
  • NLP自然语言处理—主题模型LDA回归可视化案例:挖掘智能门锁电商评价数据
    全文链接:http://tecdat.cn/?p=2175早在1995年比尔·盖茨就在《未来之路》里说过:未来没有配套智能家居的房子,就是毛坯房。现在人们生活越来越便捷,人们也更加倾向于智能化家居,当你还在纠结“人工智能”安利值不值得吃,最近不少朋友家里又出现智能门锁,相比传统门锁来说,究竟能有多智能......