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

为什么结构指针不能由另一个结构指针声明

结构指针不能由另一个结构指针声明的原因是因为结构指针是用来指向结构体变量的内存地址的,而不是用来声明新的结构指针变量的。结构指针变量存储的是结构体变量的地址,通过该指针可以访问和操作结构体变量的成员。

当我们声明一个结构指针时,需要先定义一个结构体变量,然后通过取地址运算符"&"将结构体变量的地址赋值给结构指针变量。例如:

代码语言:txt
复制
struct Person {
    char name[20];
    int age;
};

struct Person person1;  // 定义一个结构体变量
struct Person *ptr;     // 声明一个结构指针变量

ptr = &person1;  // 将结构体变量的地址赋值给结构指针变量

在上述示例中,我们先定义了一个结构体变量person1,然后声明了一个结构指针变量ptr,最后通过&运算符将person1的地址赋值给ptr

因此,结构指针不能由另一个结构指针声明,因为结构指针需要指向结构体变量的地址,而不是指向另一个结构指针变量的地址。如果需要将一个结构指针赋值给另一个结构指针,可以通过间接引用运算符*来实现,即将一个结构指针指向的地址赋值给另一个结构指针。例如:

代码语言:txt
复制
struct Person *ptr1;
struct Person *ptr2;

ptr1 = &person1;  // 将结构体变量的地址赋值给ptr1
ptr2 = ptr1;     // 将ptr1指向的地址赋值给ptr2

在上述示例中,我们将ptr1指向person1的地址,然后将ptr1的值赋值给ptr2,这样ptr2也指向了person1的地址。

总结起来,结构指针不能由另一个结构指针声明,但可以通过间接引用运算符*将一个结构指针指向的地址赋值给另一个结构指针。

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

相关·内容

  • 结构体和指针

    结构体 Golang中的结构体类似于C语言中的结构体,但具有更多的功能。结构体是一种自定义数据类型,它一组字段组成。每个字段都有一个名称和类型,并且可以存储不同类型的数据。...结构体的定义 结构体使用type关键字声明,其语法如下: type structName struct { field1 type1 field2 type2 ... } 其中,...指针 Golang中的指针是一种变量,它存储了另一个变量的内存地址。指针允许程序员通过引用间接访问变量,从而改变其状态。...指针声明 Golang中的指针使用*号来声明,其语法如下: var ptr *type 其中,ptr是指针变量名称;type是指向的变量类型。...结构体是一种自定义数据类型,一组字段组成,并用于表示复杂的数据结构指针是一种变量,它存储了另一个变量的内存地址,并用于在函数之间传递数据、动态分配内存等。

    15510

    9.3 结构指针

    01 指向结构体变量的指针 1、指向结构体对象的指针变量既可以指向结构体变量,也可指向结构体数组中的元素。 2、指针变量的基类型必须与结构体变量的类型相同。...02 指向结构体数组的指针 1、(++p)->num,先使p自加1,然后得到p指向的元素中的num成员值。 2、(p++)->num,先求的p->num的值,然后再使p自加1。...03 用结构体变量和结构体变量的指针作函数参数 1、用结构体变量的成员作参数。用法和用普通变量作实参是一样的,属于“值传递”方式。应当注意实参与形参的类型保持一致。 2、用结构体变量作实参。...用结构体变量作实参时,采取的也是“值传递”的方式,将结构体变量所占的内存单元的内容全部按顺序传递给形参,形参也必须是同类型的结构体变量。...3、用指向结构体变量(或数组元素)的指针作实参,将结构体变量的地址传给形参。 有时候,正是那些意想不到之人,成就了无人能成之事。 ——图灵 ? 文字/闫小林 图片/源于网络 - END -

    7603229

    C语言结构指针_C语言函数返回结构指针

    答(4+20+1+4+4+30 = 63) (3)直接定义结构体类型变量其一般形式为: struct{ 成员列表 }变量名 现在我们直到了怎么构造一个结构体了,下面要说一下在结构体内引用另一个结构体的方法...,也就是在结构体内嵌套另一个结构体 首先我们定义一个结构体date,month,day,year组成 在定义说明变量boy1和boy2时,其中的成员birthday被说明为date结构类型...与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值才能使用 赋值就是把结构变量首地址赋予该指针变量,不能结构名赋予该指针变量。...如果boy是被说明为stu类型的结构变量,则: pstu = &boy;是正确的 pstu = &stu;是错误的 因为结构名和结构变量是两个不同的概念,不能混淆。...版权声明:本文内容互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

    3.5K30

    Go 结构指针引发的值传递的思考

    这涉及到另一个概念:可寻址与临时值。 可寻址和临时值 可寻址 Addressable 指的是能够通过内存地址来访问变量的特性。...func main() { arr := [3]int{1, 2, 3} p := &arr[1] // arr[1] 是可寻址的 } // 结构体的字段:如果你有一个结构体变量,那么它的字段是可寻址的...事实上确实是就是这样,sVals[1] 取出来的并不是原始的对象,而是原对象的一个重新生成的副本,这就涉及到另一个概念:值传递。...为什么要这样设计 为什么 map 要返回一个副本回来,而不是返回原始对象的地址?这种设计选择是出于安全性和一致性的考虑。...可能得性能问题 最后一个问题,既然函数传递和容器类结构维护存取的都是副本,那么如果反复传递一些大对象,就会频繁复制对象,导致性能下降,所以传递对象时,应该尽量传递对象的指针,因为即使复制指针指针类型长度也在可控范围内

    21310

    初阶指针结构

    指针类型不能混用的原因: 结论1:指针类型决定了指针在被解引用的时候访问几个字节,如果是int*的指针,解引用访问4个字节,如果是char*的指针,解引用访问1个字节。...*pp=&b; 在编辑程序时,指针作为函数参数,如果不能修改指针对应内存空间的值,需要使用const修饰指针数据类型。...说明指针的指向不能改变,指针的值不能修改 const char *p = buf; 等价于上面 char const *p1 = buf; p[1] = '2'; err p = "agdlsjaglkdsajgl...", argc); for (i = 0; i < argc; i++) { printf("%s\n", argv[i]); } return 0; } 结构体 1.结构体类型的声明 1....2.结构声明: typedef struct Stu { char name[20];名字 int age;年龄 char sex[5];性别 char id[20];学号 }Stu;分号不能

    50230

    结构体与指针(一)

    (1)结构体变量 结构体变量的声明和其它变量的声明类似,大概样式如下: struct 结构体名称 结构体变量; 那么学生结构体变量声明如下: struct student stu1, stu2; 另外我们可以用...,它所占的字节数是每个成员占的字节数叠加的。...student *p; 而使用typedef之后,定义如下: Student *p; (2)结构指针初始化结构体 在此之前先讲一下访问结构体成员的三种方式,假定有下列结构体和结构指针: //声明一个结构体变量和结构指针变量...我们先看看铁链的特点: 可以任意加长 在中间添加链子非常方便 然后我们看看绳子: 不能加长 在中间添加珍珠要移动后面所有珍珠 这么一看链子要厉害许多,但是这只是对于链子和绳子来说。...2.2、链表介绍 (1)链表的实现原理 链表实际上是一个个节点组成的,每个节点都存储两个东西。一个数据、还有一个地址。数据的话就是我们要用到的东西,地址存储的是下一个节点的地址。

    67810

    C语言 | 结构指针

    C语言指向结构体变量的指针 在C语言中,指向结构体对象的指针变量既可以指向结构体变量,也可指向结构体数组中的元素。 指针变量的基类型必须与结构体变量的类型相同。...C语言中允许 (*p).num用p->num来代替 ->代表一个箭头 p->num表示p所指向的结构体变量中的num成员 C语言指向结构体数组的指针 (++p)->num 先使p自加1,然后得到p指向的元素中的...C语言用结构体变量和结构体变量的指针作函数参数 用结构体变量的成员作参数,用法和用普通变量作实参是一样的,属于“值传递”方式。应当注意实参与形参的类型保持一致。 用结构体变量作实参。...用指向结构体变量(或数组元素)的指针作实参,将结构体变量的地址传给形参。...birthday.month = 4;     (*point ).birthday.day = 29;     printf("姓名:%s\n", (*point ).name); //(*point).name不能写成

    2.2K30

    结构体和结构指针的区别

    结构指针的定义如下: struct 结构体名 *指针变量名; 例如,定义一个指向Student结构体的指针变量: struct Student *stuPtr; 上述定义了一个指针变量stuPtr,类型为指向...结构指针可以直接通过指针访问结构体的成员变量,例如stuPtr->id表示访问指针stuPtr所指向的结构体的id成员变量。...总结起来,结构体定义了一种用户自定义的数据类型,可以包含多个成员变量;结构指针用来指向结构体对象或动态创建的结构体对象,并可以通过指针访问结构体的成员变量。...2.以链表为例具体解析 链表是一种动态的数据结构,用于存储和表示一组元素,每个元素数据和一个指向下一个元素的指针组成。...总结起来,结构体和结构指针的区别在于结构体表示数据类型,而结构指针表示指向结构体的指针变量。在链表中,通过结构体表示节点,通过结构指针操作节点的指针,从而实现链表的各种操作。

    10010

    数据结构-预备知识指针

    所有的伟大源于一个勇敢的开始 数据结构预备知识 指针 1.指针:是C语言的灵魂,指针=地址 地址:内存单元的编号 指针变量:存放内存单元地址的变量 int *p;/.../p是指针变量,int *表示该p变量只能存储int类型变量的地址,不能存放别的类型的 int i=10; p=&i 详细这两部操作: 1)、p存放了i...的地址,所以我们说p指向了i 2)、p和i是完全不同的两个变量,修改其中任意一个变量,另一个都不会有影响 3)、p指向i,*p就是i变量本身,更形象的说,所有出现*p的地方都可以换成...i 2.无论指向的地址占几个字节,所有的指针变量只占4个字节,用第一个字节的地址表示整个变量的地址 指针与函数 函数内的变量是局部变量,如果参数是指针,那就能修改外部变量了 指针与数组...int a[5]={1,2,3,4,5} a是个指针常亮,存放一维数组第一个元素的地址,它的值不能被改变,一维数组名指向的是数组的第一个元素 a[i]

    31820

    9.3 C语言结构指针

    01指向结构体变量的指针 1、指向结构体对象的指针变量既可以指向结构体变量,也可指向结构体数组中的元素。 2、指针变量的基类型必须与结构体变量的类型相同。...02 指向结构体数组的指针 1、(++p)->num,先使p自加1,然后得到p指向的元素中的num成员值。 2、(p++)->num,先求的p->num的值,然后再使p自加1。...03用结构体变量和结构体变量的指针作函数参数 1、用结构体变量的成员作参数。用法和用普通变量作实参是一样的,属于“值传递”方式。应当注意实参与形参的类型保持一致。 2、用结构体变量作实参。...用结构体变量作实参时,采取的也是“值传递”的方式,将结构体变量所占的内存单元的内容全部按顺序传递给形参,形参也必须是同类型的结构体变量。...3、用指向结构体变量(或数组元素)的指针作实参,将结构体变量的地址传给形参。 C语言 |求3*4矩阵中最大的元素值及行列 更多案例可以go公众号:C语言入门到精通

    6432925

    指针与函数和结构

    为什么可以通过(*p)()调用,网上没有准确的答案,在这我也只能认为是(*p)是fun函数名称之后退化为指针形式p在进行调用。...指针结构体部分早前已经在代码备注里面写了,所以也不多做分析了。...结构体针对指针有方便的调用方法指向(->),例如下面实例中的p->year,这就放方便了通过指针来调用成员的步骤。因此我们只要通过结构体类型的指针就能指向结构体类型的变量。...主要将的是指针结构体的关系,所以关于结构体其他方面不多说。而下面代码就很好的解释了关联。...3 4 14 24 35 我是通过结构指针通过p的指向结构体变量地址输出的 1 2 3 10 20 30 2 3 4 14 24 35 我是通过结构指针通过p的指向结构体变量地址并通过p1指向p->

    51330

    【C语言】指针结构

    什么是指针 指针类型与指针解引用 野指针 指针运算 指针和数组 二级指针 指针数组 结构结构体的声明与成员的类型 结构体变量的定义和初始化及访问 结构体传参 结语 ✍前言 指针结构体这两块内容是非常重要的...结构体的声明与成员的类型 结构体的声明 struct tag { member-list; }variable-list; //例如一个学生 //typedef:重命名 typedef struct...结构体变量的定义和初始化及访问 有了结构体类型,那我们就该研究怎么去定义变量 struct Point { int x; int y; }p1; //声明类型的同时定义变量p1 struct Point...p2; //定义结构体变量p2 一般可以在声明的时候去定义变量。...下面我们可以来看看怎么去初始化: //一、常规初始化 struct Stu //类型声明 { char name[15];//名字 int age; //年龄 }; struct

    82020

    C语言结构体与结构指针的使用

    C语言结构体与结构指针的使用 tips:最近要好好学习一下数据结构,所以必不可少的就是c语言的结构体和结构指针了,所以就整理一下这些基础知识 c语言结构体(struct)是一系列具有相同类型或不同类型的数据构成的数据集合...c语言是一门面向过程的编程语言,而结构体的使用在某些层次上跟面向对象有点异曲同工之处了。下面回归正题,学习一下结构体以及结构指针的知识。...,结构体名是一种类型,不能被当成变量名来使用 变量名声明方法: 1)struct 结构体名 结构体变量名; 2)直接在定义结构体的时候添加变量名的声明 //在main()中定义及初始化 struct...1.结构指针的定义方法 1)struct 结构体名 *指针; 2)直接在定义结构体的时候添加结构指针声明 //在main()方法中定义 struct student *p1;//定义结构指针...输出) 结构指针的访问变量方法 1)p->结构体成员; 2)(*p).结构体成员; //指针访问 struct student *p;//定义结构指针 p=&st1; printf("%d %s

    2.1K10

    4.Go-结构体,结构指针和方法

    4.1.结构结构体:讲一个或多个变量组合到一起形成新的类型,这个类型就是结构体,结构体是值类型 定义结构体和赋值 //Learn_Go/main.go package main import "fmt...//{jack 12} //第三种 peo.Name = "alice" peo.Age = 25 fmt.Println(peo) //{alice 25} } 4.2.结构指针...由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用结构指针完成 可以结合new()函数创建结构指针 //Learn_Go/main.go package main import "fmt...,通过结构体变量调用 默认是函数,隶属于包,所以需要添加标识,告诉编译器这个方法属于哪个结构体   (1)创建方法 //Learn_Go/main.go package main import "fmt...p.Weight) } func main() { peo := People{"derek",120} peo.run() //derek 正在跑步,当前体重为: 120 } (2)修改值,用指针

    1.2K20
    领券