C语言 指针入门最大的误区:int *p=&a;a的地址赋值给的是p不是*p

这篇具有很好参考价值的文章主要介绍了C语言 指针入门最大的误区:int *p=&a;a的地址赋值给的是p不是*p。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在学C语言的途中,不免会遇到很多难题。相信学C和C++的同学们对指针一定有所耳闻,它也是大家在日后学数据结构的基础。

        每一个变量都有一个内存位置,每一个内存位置都定义了可使用 & 运算符访问的地址,它表示了在内存中的一个地址。指针有时也是个普通的变量,不过和其他变量不同的是,指针中装的是地址,大多数情况下是其他变量的地址

在课程中,老师很喜欢用以下式子来定义指针:

int a = 5;
int *p = &a;

 很多同学此时就有了疑问:&a也就是a的地址到底赋值给了p还是*p?

 重点来了:此时的&a赋值给的是p!!!或者我们可以换以下写法,看的更为清晰

int a = 5;
int* p = &a;

 可以看出,这个写法将 int 与 * 连在一起写了,我们便可以理解为:

声明一个变量p,这个变量p的类型是 int* (注意,是int*不是int),然后将a变量的地址赋值给了p变量,也即 “指针p指向a” 。

但是,与其他变量不同,int * 类型的变量不能直接连续声明。下面用 p 与 q 进行对比:

int* p,q;

如上,只有 p 为 int* 类型,q 依然是普通 int 类型的整型变量。

int* p,*q;

 如上,此时的 p 与 q 才为 int* 类型的指针。

以下几种写法完全等价,看个人习惯(大部分人习惯的是第一种,但我个人觉得第二种是最容易理解的):

int *p1;

int* p2;

int * p3;

int*p4;

所以我们再来对比一下指针的几种赋值:

 第一种(声明时赋值):

int a = 5;
int* p = &a;

第二种(声明后赋值):

int a = 5;
int* p;
p = &a;

第三种(连续赋值):

int a = 5,*p = &a;

第三种赋值需要单独说一下:此时&a赋值给的依然是p而不是*p!!!虽然此时看起来非常像 *p = &a,但实质上是 p = &a。此时只不过先用 int 声明了一个普通变量,后一句把 int* 的 int 省略了,与第一种声明时赋值完全相同。

此时会发现这三种除了写法不同以外,作用却是完全相同的。 

易错误区一:

int a = 5;
int* p;
// 错
*p = &a;

  错误原因:*p的类型是 int 类型,p的类型才是 int*,此时等于号右边是int*类型,等于号左边是int类型,会报警告!(类型不同强制转换的警告,且p此时不但没成功指向a,还成了野指针)

易错误区二:

int a = 5;
// 错
int p = &a;

 错误原因:p 此时的类型是 int 类型,此时等于号右边是int*类型,等于号左边是int类型,会报警告!(类型不同强制转换的警告,且p此时不是指针变量,而是普通的 int 变量)

 易错误区三:

int a = 5;
// 错
int *p = 5;

  错误原因:p的值没有初始化。p就跟其他普通成员变量一样,需要初始化。否则,p此时谁也不知道存的什么值,用*取内容程序也一定是有问题的。像此类p不知道指向什么地方,就进行操作的指针,叫做野指针。

总结

可以用以下两种方法去理解指针变量赋值问题

第一种:

int *p=&a;   p指针在声明时,*仅仅只起着说明p是指针变量的作用,这种写法更强调了 p 指向的区域是一个 int 类型的区域。所以 a 的地址赋值给的是p,而不是*p。

第二种(前文提到的方法):

int* p=&a;   p指针在声明时,类型为 int* ,这种写法更强调 p 的类型为 int*。所以,将 a 的地址赋值给一个 int* 类型的变量,而不是赋值给 *p。

其他当然还有很多指针:char* ,int* ,long* ... 以此类推,本例仅用 int* 做演示。星号前面的类型是这个指针指向区域的类型,可以是C语言中的任何数据类型。

如果有帮助就给个赞再走吧!!!文章来源地址https://www.toymoban.com/news/detail-761236.html

到了这里,关于C语言 指针入门最大的误区:int *p=&a;a的地址赋值给的是p不是*p的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言指针快速入门

    简单的说指针用于表示地址,存放的是一个地址 获取num值的本质是通过变量找到变量对应的地址,在从地址找到空间把值取出来。 num的值是=1 num 地址 =0x7ffc7fc18f2c ptr的地址是0x7ffc7fc18f20 printf(“nptr的地址是%p ptr存放的值是一个地址为%p”,ptr,ptr); ptr这个空间存储的值是num的指

    2024年02月09日
    浏览(31)
  • 【 c 语言 】指针入门

    🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 引言: 在计算机科学的世界里,指针是一个至关重要且经常令人困惑的概念。尤其是在C语言的学习过

    2024年04月11日
    浏览(30)
  • 【C语言】入门——指针

    目录  ​编辑 1.指针是什么  2.指针类型和指针运算 2.1指针+-整数 2.2指针-指针 2.3指针的关系运算  3.野指针 3.1野指针成因  👍指针未初始化: 👍指针越界访问:  👍指针指向空间释放: 3.2如何规避野指针  4.指针和数组 5.二级指针  6.指针数组 指针,是C语言中的一个重要

    2024年02月09日
    浏览(29)
  • 详解__int128,最大可用整数类型

    前言:有些题目需要的数值刚好比 long long 的最大值大那么一点点,那么我们就可以用__int128 来搏一搏(并不是所有OJ都支持这个数据类型,受编译标准影响) 最大值是多少 int 最大值:2^(32-1)-1【受电脑字长影响】 long 最大值:2^(32-1)-1【不可改变】 冷知识:int 大小受电脑字

    2024年02月15日
    浏览(66)
  • C语言入门篇——指针篇

    目录 1、指针 1.1内存地址  1.2基地址 1.3指针变量 2、指针类型 2.1指针+-整数 2.2指针的解引用 3、特殊指针 3.1野指针 3.2空指针 4、指针运算 4.1指针-指针 4.2指针的关系运算 5、指针和数组 6、二级指针 7、指针数组 1.1内存地址 内存是电脑上特别重要的存储器,计算机中程序的运

    2023年04月27日
    浏览(25)
  • 【C语言基础入门】二级指针、一维数组与指针、二维数组与指针

    在学习C语言的过程中,理解指针的概念是非常重要的。指针提供了一种直接访问内存地址的方式,使得我们可以更加灵活地管理数据和内存。在本文中,我们将介绍C语言中的二级指针、一维数组与指针,并通过通俗易懂的语言和示例代码来帮助读者理解这些概念。 二级指针

    2024年02月05日
    浏览(57)
  • 【C语言】指针的入门篇2,深入理解指针和数组的关系

    欢迎来CILMY23的博客喔,本期系列为【C语言】指针的入门篇2,深入理解指针和数组的关系,图文讲解指针和数组关系的知识,带大家理解指针和数组的关系,以及指针+数组的用法,感谢观看,支持的可以给个赞哇。 前言 在上一篇博客中,我们了解了指针就是地址,并且把地

    2024年02月20日
    浏览(51)
  • Rust编程语言入门之智能指针

    指针:一个变量在内存中包含的是一个地址(指向其它数据) Rust 中最常见的指针就是”引用“ 引用: 使用 借用它指向的值 没有其余开销 最常见的指针类型 智能指针是这样一些数据结构: 行为和指针相似 有额外的元数据和功能 通过记录所有者的数量,使一份数据被多个

    2023年04月16日
    浏览(54)
  • C语言入门——求最大公约数(2种方法超详细)

    基本介绍: 最大公约数(greatest common divisor,简写为 gcd ;或highest common factor,简写为hcf),指某几个整数共有因子中最大的一个。 最大公约数 能够整除一个整数的整数称为其的约数(如5是10约数); 能够被一个整数整除的整数称为其的倍数(如10是5的倍数); 如果一个数既

    2024年02月08日
    浏览(103)
  • C语言 指针声明和定义 - C语言零基础入门教程

    目录 [一.指针简介] [1.内存] [2.内存地址] [3.指针声明] [二.指针类型] [三.声明并初始化一个指针] [1.声明指针并直接初始化 – 推荐] [2.先声明指针在初始化 – 不推荐] [四.查看指针地址和指针的值] [五.NULL 指针 – 空指针] [六.重点总结] [七.猜你喜欢] 零基础 C/C++ 学习路线推荐

    2024年03月22日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包