定义结构体指针变量要取地址符吗

定义结构体指针变量要取地址符吗,第1张

c语言 取结构体地址

c语言 取结构体地址,结构体赋值,对用不用取地址符有些困惑?

芝士的草原

转载

关注

10点赞·2025人阅读

满意答案

vhjkjkol

20141115

采纳率:56% 等级:7

已帮助:510人

从本质上来说,stunum、stuname、stuscore

都是变量,变量有两部分构成,即变量地址和变量的内容,直接写变量就是取它的内容。

scanf语句是将输入的数据存入地址中,所以scanf()里的后半段里应该写地址,因而要在stunum前加取地址运算符“&”。

stuname是数组名,数组的数组名里的内容就是该数组的首地址,简而言之,stuname就是地址,所以不用加“&”。

而之所以stuname可以直接写而float数组stuscore[]要一个一个赋值,是因为

stuname是字符数组,字符只占一个字节,即stuname[0]和stuname[1]之间无空隙,输入字符串,程序会将一个个字符填入字符数组。

而float型占4个字节(32位机),这样stuscore[0]和stuscore[1]间就会有空隙,比如说你输入两个数字,一个占1个字节,可能第二个数字就写在了stuscore[0]里面,在输出时只能输出stuscore[0]而无法输出后面的数。此外

,还有可能就是一个数字一半在score[0],一半在score[1],系统就会报错并关闭程序。所以float、int等超过一个字节的不能像char型数组那样直接读取,只能一个一个取地址进行赋值

你可以用sizeof来看各种数据所占字节数。用法:

inti;

i=sizeof(char);

printf("%d",i);

输出的就是char型所占的字节数了,char可以改成int、float或是你所定义的结构体。

指针指的是内存地址,是内存中的一个内存区块的地址编号;

指针变量就是一个变量,这个变量本身要存储在内存中,指针变量所在内存中存储的就是这个指针变量所指向的地址;

指向指针的指针变量:本身也是指针变量,此变量指向的地址中存储的还是地址;

例如给的代码中,p是指针变量,p表示p中存储的地址所指向内存空间;a=&p表示把p这个指针变量所在的地址传递给a;

i

所在内存地址编号为x1004;p所在内存地址为x1100;a所在内存地址为x1200;

则p=&i表示吧x1004这个地址存到p所在的x1100内存位置中;

a=&p吧x1100这个地址存到a所在的x1200内存位置中。

首先,你定义了一个指针a,这个指针是一个指向整型变量的指针。

vol函数的参数是一个二级指针,是指向指针变量的指针。

vol(&a)的意思是将指针a的地址传递给vol的二级指针a。在vol函数中,a是一个二级指针,它指向的内容是主函数中定义的指针。

你这里容易混淆,假设这样:int a;

vol(&a);

调用vol的函数

void vol(int b){}

实质上是b->a->int变量

明白了么?就是将a的地址赋值给b了。b就是二级指针。a是一级指针。

补充:本来讲解完了,我就不想多说了,但是看了楼下这位,啊,现在是楼上那位自由的发言,我十分不解。不知道其所云何物。

首先,定义的指针a是一个指针类型的变量,它存储的就是一个地址啊,这个地址就是你所申请的那100个整形空间的首地址。

其次,你在这100个空间中的第三个赋值为3。

然后将a指针的地址传递给参数b,这个b是一个指向指针的指针变量,它存放的是指针a的地址。因此,b就指向了指针a,也就指向了指针a指向的首地址。

再次,你打印的是b[0][0],在主函数中并未赋值的a[0],当然是没有值的。

这个关系,我想任何C语言的学者都不会否认吧。那就是b指向指针a,指针a指向了你所申请的100个int空间的首地址。就是这样的简单关系啊。不知道楼上 自由 所云?!

问题补充:我再说详细一点吧,

void vol(int b)//为了不混乱,我把a改成b

{

b=new int[10];

(b)[0]=100;

}

补充回答:b在局部函数vol中申请了10个整型空间,将此空间的首个元素存储为100实质上a就指向了这个整形空间,并且指向100但是请注意,参数传递实际上是参数赋值的过程,就是说相当于int b = &a。所以b申请了空间,a自然也就有了空间,也指向100你的这个函数说明借由vol函数为a申请了空间并赋值。

例如,char a='c';

char p=&a;

如果想知道指针p的地址,c/c++直接用 printf("%x\n",&p);即可

C++还可以用cout<<&p<<endl;

&做取地址符,后面直接加上变量名即可知道某个变量的内存地址

p就是一个双重指针啊,意思就是说这个指针变量里面放的是一个指针的地址(一般的指针变量里面放的是一个变量的地址),这么说不知道你明不明白。

通过指针变量获得地址值:

int

p;//双重指针

int

q;//普通指针

p=&q;//将指针q的地址赋值给p

通过标准函数获得地址值:

int

p;

p=(int)malloc(nsizeof(int));//动态创建n个int类型的指针变量空间

其实说白了双重指针就是二维数组的头指针,数组的每一行的开头就是那一行所代表的一维数组的指针,二维数组头指针就是每一行的头指针的地址数组。

我自己都觉得指针这个东西好绕。。。。不过多用就明白了。

这是正确的。先看一下解释吧,变量的指针就是变量的地址。存放变量地址的变量是指针变量。即在c语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个变量的地址或称为某变量的指针。

可能有些难以理解,再附一段程序,

#include

#include

int main()

{

int a=10;

int p;

p=&a;

printf("the pointer p address %x\n",p);

printf("the pointer p value %d\n",p);

return 0;

}下面是运行结果,可以看到第一行输出了指针数据p,也就是变量a的地址。采用十六进制显示。第二行输出了目标标量a的值,也就是10。这里用存取内容运算符''对目标变量a读写数据。

解释的不知道能不能懂,可以自己多看一些别的书,可能有更好的解释吧

C语言里面的地址实际上就是一个内存单元的编号,计算机一般是以一个字节为最小的存储单元的,每个字节就给它编一个编号,这个编号就是这个字节的地址,这个编号也就是地址是具有唯一性的。指针指向一个变量的地址,这个类似于,通过知道房间号就可以确定这个房间的具体位置是一样的道理,这个房间编号就是房间的地址。

因为指针变量b尚未赋值,就访问它指向的内容,所以指令b=314;是失败的。

给指针赋值语句是这样的:

b=&a; // 也就是你程序中注释掉的那行

给指针指向的内容赋值语句是这样的:

b=314; // 前提是b必须先赋值

读取指针指向的内容的语句是这样的:

x=b; // 其中x是一个float类型的变量,并且前提是b必须先赋值

以上就是关于定义结构体指针变量要取地址符吗全部的内容,包括:定义结构体指针变量要取地址符吗、c++指针: 储存 “指针地址” 的 地址是什么、指针 取地址符 传参等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9715154.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存