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

指针变量的地址
EN

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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 15:29:40

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

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

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

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-10-02 15: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
运行
复制
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 15:39:59

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

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

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

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

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

https://stackoverflow.com/questions/19140657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档