首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C指针赋值行为

C指针赋值行为的实现通常由编译器决定,不同编译器和编译选项可能导致不同的结果。通常,有以下几种可能的行为:

  1. 如果指针是字符或字符串类型,指针赋值会导致字符串或字符类型的拷贝操作。例如,声明两个char *指针p1和p2,并为其赋予不同的值,则赋值行为会创建两个不同的字符地址并复制字符串。
  2. 如果指针是int、float等类型,指针赋值会导致目标变量的值被赋给指针指向的地址。例如,声明一个int *指针p并对其赋值为变量a的地址,则p指向a所指向的地址,并将a的值复制到该地址。
  3. 如果指针指向的对象是结构体或联合体,指针赋值可能导致目标变量的多个成员被赋值。例如,声明一个struct Point point;,并将point的x成员值赋给一个int *指针p,则p指向x在内存中的地址,并将x的值复制给该地址。同时,指针p的值可能也是结构体Point中的成员之一,因此在赋值行为中,结构体中的多个成员被复制。

总之,C指针赋值行为取决于指针的类型和指针指向的对象,可能有许多不同的实现方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于变量、指针、别名(引用)和指针的指针

C/C++中的指针和别名这个东西确实是够恶心的。今天蛋疼的就写一下这些东西的区别,变量永远是最简单的没有什么技术含量,那么另外一个比较简单的就是别名了,其实个人感觉这个东西完全可以看作是一个人的“小名”,只是对同一个变量多了一个称呼而已,指向的数据和地址是和原变量完全一致的,并且用&进行取地址操作的得到的地址和原变量的地址是完全一致的(因而在对指针进行赋值的时候如果直接对指针地址操作则需要对变量或者别名使用&进行取地址运算,如果要直接赋值则需要使用*p=进行赋值)。最复杂的就是指针了,同样个人认为指针到头来就是一个地址,这样可能会比较好理解一些。例如*pointer,那么带有*(解引用操作符)的时候则是表示的数值,如果没有*则表示的是地址。也就是说可以将pointer看成一个内存地址在这个地址中保存的是另外一个数据的地址,当存在*的时候表示取该地址存取的内容,否则则是取这个变量保存的地址。指针的指针则就更加复杂了,例如**p,那么可以看作指针保存的数据是另外的一个指针,解引用操作一次将会得到一个*p,这仍然是个指针,当进行二次解引用操作的时候(**p)才能读到p中保存的数据信息。这么说可能比较难理解,那么看个实例就明白了。效果如下图:

03

智能指针小分析

所谓资源就是,一旦用了它,将来必须还给系统。C++中内存资源的动态分配经由new与delete实现。问题在于,无论是有意无意,我们有时候总会忘记释放内存中的资源。例如delete语句出现在某个循环语句中,而我们的continue或者break却跳过了它的执行;或者是在程序中某个分支含有函数return语句,而delete操作放在return 语句之后;更加难以预料的事情是程序执行过程中发生了异常,导致我们的delete语句没有执行。总的来说,把资源回收交给用户并不是一种好做法。我们期望有一种机制,它帮助我们管理从系统获取而来的资源,当我们不再使用该资源时,该机制能自动帮我们回收,避免了内存泄漏问题。智能指针就是这样一种资源回收机制。

02
领券