首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >指针变量的地址

指针变量的地址
EN

Stack Overflow用户
提问于 2013-10-02 07:26:59
回答 4查看 255关注 0票数 1

我目前正在学习c语言,我碰到了这个代码。ptr已经是一个指针类型的变量,那么&操作符对它的影响是什么,因为我知道运算符通常用来获取非指针变量的地址。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct name {
  int a; float b; char c[30];
};
int main()
{
  struct name *ptr;
  int i,n;
  printf("Enter n: ");
  scanf("%d",&n);
  ptr = (struct name*)malloc(n*sizeof(struct name));
  /* Above statement allocates the memory for n structures with pointer ptr pointing to       base address */ 
  for(i=0; i<n; ++i) { 
    printf("Enter string, integer and floating number respectively:\n");
    scanf("%s%d%f", &(ptr+i)->c, &(ptr+i)->a, &(ptr+i)->b); 
  }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-02 07:29:40

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
&(ptr + i)->c

这将获取存储在ptr的ith元素中的变量c的地址。所以你的第一直觉是正确的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ptr+i

是一个简单的指针算法,用于查找数组的ith元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(ptr+i)->c

从该结构访问字段c&接受该变量的地址。

票数 2
EN

Stack Overflow用户

发布于 2013-10-02 07:33:46

代码&(ptr + i)->c提供属于列表中ith结构的struct元素c的地址。让我们把它分解一下。

(ptr + i)是指针算法。它将I添加到存储在ptr的地址中。

(ptr + i)->c通过指针(ptr + i)访问struct元素c。

&(ptr + i)->c通过指针(ptr + i)获取struct元素c的地址。

而且,我知道这并不完全是在做你认为它正在做的事情,因为你认为地址-运算符应用于指针,而只是一个FYI:你确实可以得到一个指针的地址。这样的构造是指向指针的指针,当您想要更改函数中的指针(而不仅仅是它指向的地址处存储的值)时,它非常有用。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int a = 5; /* regular variable */
int* pa = &a; /* pointer to a */
int** ppa = &pa; /* pointer to pointer (which points to a) */
票数 2
EN

Stack Overflow用户

发布于 2013-10-02 07:39:59

首先,使用C语言和C++语言中的运算符&来获取任意变量的地址。更准确地说,它可以用于获取几乎任何lvalue的地址(C和C++在这方面有一些不同)。指针变量是普通变量。它们没有什么特别之处,这意味着在看到运算符&应用于指针时没有什么不寻常之处。

其次,在您提供的代码中,实际上没有将&应用于指针的单个实例。您的代码中有四个&应用程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
&n
&(ptr+i)->a
&(ptr+i)->b
&(ptr+i)->c

在前两种情况下,它被应用于int对象。在第三种情况下,它被应用于float对象。在最后一种情况下,它将应用于char [30]对象。没有指示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19140657

复制
相关文章
C++指针变量作函数参数接收数组地址
在C++中,用指针变量指向数组元素时要注意: 指针变量p可以指向有效的数组元素,实际上也可以指向数组 以后的内存单元。
小林C语言
2020/12/16
9510
C++指针变量作函数参数接收数组地址
C++定义指针变量 | 使用指针变量
C++规定所有变量在使用前必须先定义,即指定其类型,在编译时按变量类型分配存储空间,对指针 变量必须将它定义为指针类型。
小林C语言
2020/12/11
2.7K0
C++定义指针变量 | 使用指针变量
关于变量、指针、别名(引用)和指针的指针
C/C++中的指针和别名这个东西确实是够恶心的。今天蛋疼的就写一下这些东西的区别,变量永远是最简单的没有什么技术含量,那么另外一个比较简单的就是别名了,其实个人感觉这个东西完全可以看作是一个人的“小名”,只是对同一个变量多了一个称呼而已,指向的数据和地址是和原变量完全一致的,并且用&进行取地址操作的得到的地址和原变量的地址是完全一致的(因而在对指针进行赋值的时候如果直接对指针地址操作则需要对变量或者别名使用&进行取地址运算,如果要直接赋值则需要使用*p=进行赋值)。最复杂的就是指针了,同样个人认为指针到头来就是一个地址,这样可能会比较好理解一些。例如*pointer,那么带有*(解引用操作符)的时候则是表示的数值,如果没有*则表示的是地址。也就是说可以将pointer看成一个内存地址在这个地址中保存的是另外一个数据的地址,当存在*的时候表示取该地址存取的内容,否则则是取这个变量保存的地址。指针的指针则就更加复杂了,例如**p,那么可以看作指针保存的数据是另外的一个指针,解引用操作一次将会得到一个*p,这仍然是个指针,当进行二次解引用操作的时候(**p)才能读到p中保存的数据信息。这么说可能比较难理解,那么看个实例就明白了。效果如下图:
obaby
2023/02/28
1.4K0
关于变量、指针、别名(引用)和指针的指针
8.2 指针变量
左端的int是在定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。
小林C语言
2019/07/12
4000
地址、指针与引用
计算机本身是不认识程序中给的变量名,不管我们以何种方式给变量命名,最终都会转化为相应的地址,编译器会生成一些符号常量并且与对应的地址相关联,以达到访问变量的目的。  
Masimaro
2018/08/31
7050
C/CPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针
普通变量可以不赋初值,但是指针变量的初值必须万分慎重,因为未来的*操纵会以这个初值为目标内存地址,往里面读写数据(可以才C primer plus中看到相应分析)
CtrlX
2023/03/21
1.7K0
C/CPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针
指针|内存和地址
指针 1. 声明为指针并不会改变这些表达式的求值方式。 2. 一个变量的值就是分配给这个变量的内存位置所存储的数值。 3. 变量的值就是分配给该变量的内存位置所存储的数值,即使是指针变量也一样。 4. 内存中的每个位置由一个独一无二的地址标识。 5. 内存中的每个位置包含一个值。 6. 变量名字与内存位置之间的关联不是硬件所提供的,它是由编译器为我们实现的。 所有这些变量给了我们一种更方便的方法记录地址--硬件仍然通过地址访问内存位置。 #include <stdlib.h> #include <stdi
heidsoft
2022/03/14
3830
C语言中只读指针变量与只读变量指针
如果我们开发的时候,定义了某个变量,不想让别人修改时,就可以使用“const”关键字。
手撕代码八百里
2021/09/08
2.5K0
C/CPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针
普通变量可以不赋初值,但是指针变量的初值必须万分慎重,因为未来的*操纵会以这个初值为目标内存地址,往里面读写数据(可以才C primer plus中看到相应分析)
CtrlX
2022/10/04
1.7K0
C/CPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 空指针
【C 语言】变量本质 ( 变量修改 | 直接修改变量 | 通过内存地址间接修改变量 | 通过指针间接修改变量 )
文章目录 一、变量修改 1、直接修改变量 2、通过内存地址间接修改变量 3、通过指针间接修改变量 一、变量修改 ---- 访问 变量 , 就是 访问 内存空间 ; 访问 指的是 读写 内存 ; 修改变量的方式 : 直接修改 : 通过 变量 , 可以 直接 修改内存 , 间接修改 : 通过取地址符 , 拿到变量所在内存的 地址编号 , 通过地址编号修改内存 ; 1、直接修改变量 #include <stdio.h> int main() { // 定义变量 a int a = 0;
韩曙亮
2023/03/29
1.3K0
【C 语言】变量本质 ( 变量修改 | 直接修改变量 | 通过内存地址间接修改变量 | 通过指针间接修改变量 )
7.1 什么是指针和指针变量
解释:由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,因此,将地址形象化地称为“指针”
小林C语言
2019/08/19
1.1K0
C语言 | 指向结构体变量的指针变量
解题思路:在主函数中声明了struct student类型,然后定义了一个struct student类型的变量s_1,又定义了一个指针变量p,它指向一个struct student类型的对象,将结构体变量s_1的起始地址赋给指针变量p,也就是使p指向s_1,然后对s_1的各个成员赋值。
小林C语言
2020/12/21
1.8K0
C语言 | 指向结构体变量的指针变量
[GO] golang中的变量与指针
基础看的很多次,但是在实际的运用过程中 , 还是不能准确的理解变量和指针的细节 , 容易把自己搞晕
唯一Chat
2021/04/23
7690
golang 利用指针导出变量
golang 利用指针导出变量 1 golang中的指针类型:unsafe.Pointer & uintptr unsafe.Pointer 类似 C 的 void *,在golang中是用于各种指针相互转换的桥梁。uintptr 是golang的内置类型,能存储指针的整型,uintptr 的底层类型是 int,和 unsafe.Pointer 可相互转换。 unsafe.Pointer 用于转换不同类型指针,不可以参与指针运算 uintptr 用于指针运算,GC会自动回收 uintptr 类型的目标 Go
csxiaoyao
2018/05/11
8210
C语言 | 改变指针变量的值
解题思路: 指针p的值是可以变化的,printf函数输出字符串时,从指针变量p当时所指向的元素开始,逐个输出各个字符,直到遇‘\0’为止。而数组名虽然代表地址,但是它是常量,它的值是不能改变的。
小林C语言
2020/12/15
3.5K0
C语言 | 改变指针变量的值
8.2 C语言指针变量
左端的int是在定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。
小林C语言
2020/12/07
1.3K0
8.2 C语言指针变量
【C语言笔记】指针变量的运算
指针变量也是可以进行运算的,如指针变量对其自身加上某个整数或减去某个整数,这在内存上体现为:相对这个指针向后偏移多少个单位或向前偏移了多少个单位,这里的单位与指针变量的类型有关。在32bit环境下,int类型占4个字节,float占4字节,double类型占8字节,char占1字节。
正念君
2019/06/26
1.4K0
【C语言笔记】指针变量的运算
C语言|图解指针变量
指针变量也是一个变量,对应一块内存空间,对应一个内存地址,指针名就是己址。这空内存空间多大?一个机器字长(machine word),32位的CPU和操作系统就是32个位,4个字节,其值域为:0x-0xFFFFFFFF。64位的CPU和操作系统就是64个位,8个字节,其值域为:0x-0xFFFFFFFFFFFFFFFF。
C语言中文社区
2022/11/08
1.6K0
C语言|图解指针变量
const修饰指针变量详解
对于指针的认识,应该很多时候都是从C语言开始,那么const修饰的指针变量到底与指针变量有点什么区别呢?
全栈程序员站长
2022/07/11
3470
C语言之指针变量
  4、指向常量的常量指针:有2个const修改,既不能间接修改变量的值,也不可重新赋值新变量地址
tandaxia
2018/09/27
2.1K0

相似问题

指针地址和指针指向的变量的地址

10

变量的地址低于指针的地址?

20

打印指针变量的地址

20

指针传递地址的扫描行为(地址变量)

10

带有指针变量的地址数组

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文