结构体指针和结构体变量的区别_结构体定义指针变量和普通变量的区别

admin 19 0

指针和结构体变量有什么区别吗?

很显然啊,p是什么,p是指向结构体这个类型的指针。也就是说,p里面放的地址,你对它进行引用,他去这个地址找,会发现一个结构体变量。你得思维开阔点儿,把结构体也想成一个普通类型的变量。stu.age是int类型,你讲int类型的地址给一个结构体,肯定不对啊。

不同的是,当结构体变量作为函数参数: 在函数中可通过变量直接使用结构体,但要注意的是,如果在函数中修改了结构体的成员变量后(如: a.a = 0),结构体本身并未发生变化,只是副本被改变。

指针,其实就是一个存放地址的变量,指针可以指向变量,数组,结构体等数据所在的内存单元。指针就是用来通过地址去找数据的,只要你把该数据的地址给指针,那么当你用到指向这个数据的指针时就等于在使用该数据。

结构体指针就是指向一个结构体的指针,就跟变量指针一个意思,变量名就是给某个结构体类型定义的一个名字。比如Int a;a就好比一个结构变量名;int p;p=a;p就好比结构体指针。

你的理解是对的。形参是结构体变量的,你对该结构体的所有修改都不会影响到实参,因为形参是实参的一个完整拷贝。形参是结构体指针的,你对该结构体的修改直接影响实参的结构体数据。因为形参和实参都指向同一个内存区块。注意:形参是一个指针,如果只改变指针本身,则不影响实参。

定义结构体变量,系统会为这个变量分配实际的内存空间。定义一个结构体指针,那它就只是个指针,大小也就是系统的地址长度,它里面的值应该指向一个具体的结构体内存空间,才算正常操作。定义了指针以后,要么就用malloc分配空间,要么指向一个已经存在的变量的地址,才能做实际操作,否则只是给系统添乱的。

结构体指针和结构体变量在调用函数中的区别?

1、形参是结构体变量的,你对该结构体的所有修改都不会影响到实参,因为形参是实参的一个完整拷贝。形参是结构体指针的,你对该结构体的修改直接影响实参的结构体数据。因为形参和实参都指向同一个内存区块。注意:形参是一个指针,如果只改变指针本身,则不影响实参。

2、调用函数时,因为函数参数要临时存放到栈中,若结构体变量作为参数,则需要生成一个结构体A的副本,将其存放到栈中; 而结构体指针作为变量,只需将指针pA存放到栈中即可,提高了程序的空间效率。

3、一般来说结构变量定义的时候就分配了内存空间;但结构体指针,和其它指针一样,只有4个字节的指针大小,在使用时需要先动态的分配内存。

4、很显然啊,p是什么,p是指向结构体这个类型的指针。也就是说,p里面放的地址,你对它进行引用,他去这个地址找,会发现一个结构体变量。你得思维开阔点儿,把结构体也想成一个普通类型的变量。stu.age是int类型,你讲int类型的地址给一个结构体,肯定不对啊。

结构体变量作为函数参数有几种传递方式?详细说明各自的优缺点。

1、在C中结构体变量作为函数参数只有一种传递方式:值拷贝!主要缺点是传递时耗长,且函数中对结构体的操作结果一般是带不到主调函数中的;用结构体指针传递可以避免这些缺点,但那就不是“结构体变量”作为函数参数而“结构体指针”作为函数参数了。指针传递的缺点是容易把初学者搞糊涂,几乎无其他缺点。

2、将一个结构体变量中的数据传递给另一个函数,有下列3种方法:(1) 用结构体变量名作参数。一般较少用这种方法。(2) 用指向结构体变量的指针作实参,将结构体变量的地址传给形参。(3) 用结构体变量的引用变量作函数参数。下面通过一个简单的例子来说明,并对它们进行比较。

3、结构体传参包括三种传参方式 普通传参:函数接收到结构体参数后,会复制一份原来的结构体作为形参供函数使用,而函数内的任何操作都是对拷贝结构体的修改,不会影响到原本的结构体变化。

4、调用函数时,因为函数参数要临时存放到栈中,若结构体变量作为参数,则需要生成一个结构体A的副本,将其存放到栈中; 而结构体指针作为变量,只需将指针pA存放到栈中即可,提高了程序的空间效率。

5、优点:变量在各个函数间自由调用和赋值,不需要考虑各个函数直接的传值问题,程序简单。缺点:①资源占用多;②函数的移植性差;③全局变量用的多容易混,程序员记忆量大,有时需要列一个变量表。结构体变量:优点:方便。

6、结构体或类对象传递:在一些面向对象的编程语言中,可以使用结构体或类对象来封装数据,并通过将对象作为参数传递给函数来实现数据传递。函数可以通过对象的成员访问和修改数据的值。以上是几种常见的在函数之间传递数据的方法。根据具体的编程语言和需求,可以选择适合的方式来实现数据的传递。

标签: #结构体指针和结构体变量的区别