关于c语言结构体指针的问题

结构体指针只包含了结构体的首地址还是包含了所有成员的地址?还有结构体的首地址是什么,比如第一个成员是一个数组,那么首地址是不是就是这个数组的首地址?

6个回答

结构体指针和数组首地址相同,代码验证

 #include "stdafx.h"
#include <iostream>

using namespace std;

struct A{
    int a[100];
};

int _tmain(int argc, _TCHAR* argv[])
{
    struct A aa;
    struct A *pA=&aa;

    cout<<hex<<pA<<endl;
    cout<<hex<<(pA->a)<<endl;


    return 0;
}

首先,指针是一个存放地址的变量,就好比一排房子,你要找的东西在这排房子的某一间内,但具体的房间编号在1号房内,那么要取到目标物就要先到1号房去把编号找到,然后根据编号去找对应的房间;
指针就是这个存放编号的房间,并且它只能放一个编号,不同类型的指针可以存放不同类型的指针;
要区分结构体类型 和 结构体变量,前者是定义一个数据类型(并不分配空间),后者是根据这个类型在内存中分配了具体的空间,
结构体变量是根据它的成员的类型依次分配空间的,各成员变量的内存分配是相邻的,所以第一个成员的地址就是这个结构体变量的地址.

结构体,不是数组,没有首地址一说
结构体 对象的地址,就是分配给这个对象的地址
和int 地址一样
不过结构体有内部成员,
C 或者
C++POD类型

结构体对象的第一个成员的地址(如果有地址)
和结构体对象地址相同。

指针也可以指向一个结构体变量。定义的一般形式为:

struct 结构体名 *变量名;
前面已经定义了一个结构体 stu:

struct stu{ char *name; int num; char sex; float score;};

下面定义一个指向 stu 的指针变量 pstu:
struct stu *pstu;
当然在定义结构体的同......
答案就在这里:C语言结构体和指针
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

首先,指针是一个存放地址的变量,就好比一排房子,你要找的东西在这排房子的某一间内,但具体的房间编号在1号房内,那么要取到目标物就要先到1号房去把编号找到,然后根据编号去找对应的房间;
指针就是这个存放编号的房间,并且它只能放一个编号,不同类型的指针可以存放不同类型的指针;
要区分结构体类型 和 结构体变量,前者是定义一个数据类型(并不分配空间),后者是根据这个类型在内存中分配了具体的空间,
结构体变量是根据它的成员的类型依次分配空间的,各成员变量的内存分配是相邻的,所以第一个成员的地址就是这个结构体变量的地址.

结构体指针既是结构体首成员的地址,也是结构体的首地址。你说的是对的。
好比数组指针既是数组的首地址,也是数组第一个元素的首地址。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于指针的15个经典面试题
指针是C语言的关键,也是C的难点,该文档详细列举了15个经典的指针面试题。
C语言高频面试题之sizeof与指针和结构体专题总结
sizeof的用法,在C,C++语言笔试面试中常见问题   1,基本数据类型  cout 结果是1 cout 结果是4 cout 结果是4  cout 结果是4  cout 结果是2 cout 结果是4  cout 结果是8 2,指针变量  指针变量的sizeof的值与指针所指的值没有任何关系,所
C语言 结构体与结构体指针用法总结
在C语言开发中,结构体用到的机会很多。所谓结构体,就是定义一种里面包含多种元素的变量。 我们来看一个简单的例子。比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息。结构体变量定义如下: struct book { char name[30]; char author[20]; }; struct book a[2] = { { &quot;Nature&quot;,&quot;Lina&quot; },...
关于C中struct结构体的动态malloc和memcpy的指针操作
今天碰到一个问题,先贴代码:typedef struct Gifheader { char Signature[3]; char Version[3]; gifheader() { Signature[2] = '0'; Version[2] = '0'; } }GIFHEADER; OpenGif() { QFile
c语言中结构体指针
1、指向结构体的指针变量: C 语言中->是一个整体,它是用于指向结构体,假设我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到指向运算符“->”.
C语言结构体初始化和结构体指针
结构体初始化#include <stdio.h> //结构体的声明和定义方法 //1.声明和定义分离 struct weapon{ char name[20]; int atk; int price; }; //声明 //定义 struct weapon weapon_1; //==================================== // //2.同时进行
关于C语言结构体偏移的一点思考
前言 相信大家在c语言程序开发的过程一定都使用过结构体,那么不知你对结构体中成员变量偏移这块是如何理解的?本文将和大家一起分享下,本人最近关于c语言中结构体偏移的一些思考和总结。 另外这篇博文还可以帮你更好的理解这个问题c语言中两种宏定义的区别,关于这个思考有哪些方面的意义,细心的你可能发现本文所属的类别为linux内核设计与实现,而并非 GNU C语言编程,可能有些同学会有些许好
c中结构体指针的强制类型转换
1、结构体到结构体指针之间的转换 结构体指针的强制类型转换即结构体的数据成员在内存段当中的重新分配,结构体的存储“内存对齐”请参看上篇博客,该论述实例如下: #include #include struct A{     int num;  };      struct B{     int num;     char type;     int age; };
C语言结构体之指针访问
#include #include struct test {     int a;     int b;     char c; }; int main( int argc, char *argv[] ) {     struct test t1;     t1.a = 5;     t1.b = 55;     t1.c = '5';     int *p1 =
c语言结构体指针使用
写结构体指针前,先说一下 . 号和 -&amp;gt; 的区别记得当初刚学C语言的时候,搞不清结构体的 . 号和 -&amp;gt; ,经常混淆二者的使用。那么在C语言中 . 号是成员访问运算符,当我们需要访问结构的成员的时候,就会使用到它而当我们需要使用结构体指针来访问结构成员的时候,就得使用-&amp;gt;运算符了。结构体指针结构体指针,就是指向结构体的指针。 #include&amp;lt;stdio.h&amp;gt;#inc...
终于弄明白了的结构体与typedef的使用,还有结构体指针的使用(二层结构体指针)
* 结构体与typedef]:                 c语言规范,定义结构体:                 typedef  struct POINT                 {                     ...                     ...                 }POINT_T, *POINT_P;
C语言04 - 结构体、结构体指针、tyepdef、union、enum
1. 结构体定义和初始化// : 一系列不同类型的数据的结合 // 数组存储的是一系列相同数据类型的集合 // 结构体是存储一系列不同数据类型的集合 struct Student // 这时候并没有分配内存,只是声明了一个结构体变量,这个变量的名字是Student { char name[20]; int age; char gender[10]; int c
浅谈c语言typedef 与结构体指针(个人小经验)
 #include #include typedef struct emp{  char sex[8];  char name[15];  int age; }*emp;//这里我们用typedef把emp这个结构体变成了*emp这种指向结构体成员的结构体指针 /*typedef struct emp{  char sex[8];  char name[15];  int
C语言结构体指针的输入输出
简单构造一个结构体实例如下:struct student{    char name[20];    int score;};1.指向结构体变量demo:int main(){ struct student st1; scanf(&quot;%s %d&quot;, st1.name, &amp;amp;(st1.score)); printf(&quot;%s %d\n&quot;, st1.name, st1.score); return ...
C语言中结构体与指针的若干问题(在数据结构中的应用)
C语言中结构体与指针的若干问题(在数据结构中的应用)
C语言-结构体指针及结构体嵌套
C语言中结构体是一种构造类型,和数组、基本数据类型一样,可以定义指向该种类型的指针。结构体指针的定义类似其他基本数据类型的定义,格式如下 struct 结构体名 * 指针名; 比如: struct person{char[20] name; int age;};//先定义一个人的结构体 struct person *p;//然后可以定义一个人的结构体指针 struct person p1
结构体的指针偏移
刚开始工作,接触到大量的结构体指针代码,指针基础不好,遂写了些测试代码,总算搞明白了刚开始工作,接触到大量的结构体指针代码,指针基础不好,遂写了些测试代码,总算搞明白了 #include <stdio.h> #include <string.h> #include <malloc.h>typedef struct { int num; char* str; char body
C 语言通过结构体成员获得结构体指针
通过结构体成员拿到结构体的指针,是C语言实现继承多态的基础。面向对象C编程可以参看这里OOC 面向对象C语言编程实践。这里详细介绍这个核心的操作方法。 /** * Get struct pointer from member pointer */ #define StructFrom2(memberPtr, structType) \ ((structType*) ((char*) m
C语言--结构体指针需要malloc
如果定义一个结构体类型的普通变量,可以不malloc动态申请内存,CPU会为这个结构体变量分配内存    如果定义的是一个结构体的指针,CPU会为这个指针开辟内存,但是此时这个大小是4(如果是32位的CPU的话),所以这个空间不足以存储结构体的数据成员,就会引发错误,此时必须要malloc申请一个,结构体类型大小的动态内存,用于数据成员存储使用拓展一下,malloc是动态申请,调用后会根据虚拟映射...
结构体练习题
----------------结构体指针变量------------- 声明:结构体类型名 *结构体指针变量名(     Student *pstu;     ) 访问形式: -(*结构体指针变量).成员名       (    (*pstu).num;     ) -结构体指针变量->成员名          (   pstu->num   ) 1.学生信息 typedef s
C语言:结构体中一级指针和二级指针的创建与释放示例
结构体结构体中一级指针和二级指针的创建与释放,以一个例子来说明,笔者这里自己敲得代码,虽然用C语言几年了,但是有的东西还是会遗忘。笔者敲代码过程中也是有bug出现的,经过调试也找到了bug所在,不得不说,巩固也是很重要的。而结构体作为C语言一部分也是很重要的,指针作为C语言的半壁江山也保持着其重要地位。学过C++或Java的都知道class(类),个人觉得结构体就像是class的一部分,不过里面不能放实现class的相关属性函数。代码不是很长,但里面有很多细节的考虑,特别是一级指针和二级指针的内存的申请和释
【C】 结构体与结构体指针,->在C语言中的唯一用途
/* 结构体 */ #include #include #define STRLEN 128 struct Student { char *name; // 指针变量,指向字符,机器32位大小为32bit/8bit = 4Bytes int age; // 整形变量,4字节 float score; // 单精度浮点型,4字节 }; int main(){ int i
C语言 结构体指针需要申请内存但函数定义指针不需要申请
在函数定义指针或者变量已经为指针本身和变量本身分配了内存所以用指针指向一个已经定义的变量时不需再分配内存 但是数据结构中用指针指向结构体时只为指针本身分配了内存如果要对结结构体填入内容就要分配一个结构体大小的内存才可以 但只自己分配的内存一定要养成用free()的好习惯
结构体、结构体体指针作为函数返回值
函数使用结构体、结构体指针作为返回值分析32位机,gcc编译器使用结构体作为返回值分析反汇编代码可知,当被调用的子函数返回值为结构体的时候,调用函数将分配一段空间用于存放返回的结构体(使用一个结构体变量接受返回值),并将这段空间的地址作为调用时的参数压栈。子程序不负责对要返回的结构体分配空间。最后返回eax中存放的是结构体空间(栈中)的地址。在子程序退出的时候,调用函数可以在自己的栈帧中访问到返回的
C语言结构体中指针的复制问题
#include #include #include typedef struct TNode{ int data; struct TNode * next; }TNode,*Tree; int main(){ Tree a,b,c,d; c=(Tree)malloc(sizeof(TNode)); c->data=7;c->next=NULL; d=(Tree)malloc(si
结构体嵌套指针应注意的问题
在c语言中内存的开辟和回收是一个很重要的问题,但是如果在编程中使用到结构体类型就显得更为重要了,但是如果结构体中有嵌套了指针就变得更加更加的重要了,看起来这是一个很小的点,但是这也是一个很容易被忽略的点,下面就以案例说话struct student { char *name; int age; }stu;第一没有开辟空间int main(void) { strcpy(stu.name,"C语言");
C语言 一个例子说明结构体变量,结构体数组和结构体指针
输入三个学生的个人信息 包含学号 姓名和三门学科的成绩 输出平均成绩最高的学生的学号 姓名 各科成绩以及平均成绩 代码如下(谭浩强c程序设计的例子)#include&amp;lt;stdio.h&amp;gt;struct Student {int num; char name[20]; float score[3]; float aver; };int main() { void input(struct Stu
C语言结构体指针初始化!
今天刚刚了如何使用C语言中的结构体,但在使用结构体指针时碰到了如下问题: 编译正常,但是运行出现段错误!!! 经过上网搜索之后知道的错误的原因,没有初始化。。。 需要指出的是:结构体指针在使用之前是需要初始化的! 同时需要注意的是:           (2)结构体变量中的元素访问方式:只有一种,用"."或者"->"的方式来访问。(.和->访问结构体元素其
强制类型(结构体)转换NULL-----C指针的黑科技
一个头疼的例子(改写自Tencent—libco)#include<stdio.h> #include<string.h> typedef struct aa{ char a; int b; char o[3]; }a; int main(void) { a test; memset(&test, 0, (long)(((a *)NULL)->o)); }这个
C语言中,通过指针给结构体中的变量赋值
typedef struct Mech_Para//»úе¼°Ô˶¯²ÎÊý { int32_t P001_TipBoxX; int32_t P002_TipBoxY; int32_t P003_TipBoxZ; int32_t P004_IntervalX; int32_t P005_IntervalY; int32_t P006_TipBuckleX; ...
C语言结构指针详解(推荐)
这篇文章非常清楚,一定要转下---------------------------------------------这篇文章是九九年写的,这篇文章适合中级程序员。有不明白之处不要紧,多看几遍,然后花些时间上机操作及认真思考每个问题。遇到难题要研究、解决,难题出现于哪里?该用什么方式来解决?为什么要选择这个方式解决?有其它的解决方法吗?这样的解决方案完美吗?其实做个程序员这些基本的思考心得
结构体数组和结构体指针
#include #include /** 结构体数组和结构体指针(或结构体数组指针) */ struct Stu{ int age; char sex; char str[10]; //结构体数组的定义与初始化 }stu_arr[2]={{10,20,"haha"},{30,40,"niha0"}}; /** 打印结构体信息 */ int printInfo(struct S
C语言复习 -- 结构体指针与自增运算符
测试代码: #include #include int main() {  struct student {   char *name;   int score;  };  struct student st = {"Brian", 97};  struct student *ptr = &st;  printf("ptr->name = %s\n",
函数指针&指针函数&结构体调用函数
结构体通过指针调用函数的方法在项目中比较实用:上层函数实现,底层调用从而实现底层通知上层的回调功能!!! 在此说一下函数指针和指针函数这两个概念,下面先说一下两者的区别。 再者就是说一下结构体是如何通过函数指针的方式调用函数的。
数组强制转换成结构体指针
今天看公司代码,遇到一个数组指针强制转换成结构体指针的地方,就在想这样做的结果会是什么,和别人讨论了一下。得到结果是,这样做是让结构体按照自己的属性重新读取数组中的数据, 字节对齐 如果结构体中所有属性所占字节和数组的类型所占字节一样(如果数组类型是16位的,属性也是16位的),那就直接按照属性的顺序,将数组中的数据依次读取出来(是读取,不是复制,因为是指针强制转换) 字节不对齐 如果结构
typedef关键字与结构体、结构体指针的定义
一使用typedef定义结构体 二使用typedef定义结构体指针 一、使用typedef定义结构体typedef用来定义新的数据类型,通常typedef与结构体的定义配合使用。使用typedef的目的使结构体的表达更加简练(所以说typedef语句并不是必须使用的)。定义一个名字为TreeNode的结构体类型(现在并没有定义结构体变量,并不占用内存空间):struct TreeNode {
结构体指针初始化问题
(1)结构体指针是否需要初始化 struct student{ char* name; int score; struct student* next; }stu,*stu1; stu.name=(char*)malloc(sizeof(char));  //1 结构体成员指针需要初始化 strcpy(stu.name,"Jim"); stu.scor=90; s
结构体初始化 访问的三种方式(结构体指针)
输出三个学生中成绩最高的学生信息 1>  #include typedef struct student {     int num;     char name[10];     int score; } Student; int main() {     Student s1,s2,s3,max;     scanf("%d %s %d",&s1.num,s1.
有关结构体指针与函数传参返回值类型的六种方法
#include<stdio.h> #include<stdlib.h>#if 0 //struct_1 在main函数中定义结构体,并实现功能 int main(void) { struct results { float interim_results; float end_results; float average_scores
C学习:const修饰、结构体指针及位域使用
C学习:const修饰、结构体指针及位域使用 const的临近修饰用法 const在前面 const int nValue; // nValue是const const char *pContent; // *pContent是const, pContent可变 const char* const pContent; // pContent 和 *pContent都是const ...
相关热词 c# mvc 上传 文件 c#扫描软件 c# 文字打印左右反转 c#byte转换成数字 c# 音量调节组件 c# wpf 界面 c# 读取证书文件的内容 c# 单例模式 工厂模式 c# dgv 树结构 c#继承 反序列化