标签: pointers

30
推荐指数
6
解决办法
2610
查看次数

两个临时表的地址是否保证在同一个表达式中不同?

考虑以下程序:

#include <iostream>

int const * f(int const &i) 
{ 
  return &i; 
}

int main() 
{
  std::cout << f(42);  // #1
  std::cout << f(42);  // #2

  std::cout << f(42) << f(42);  // #3
}
Run Code Online (Sandbox Code Playgroud)

根据编译器和设置的优化级别,打印在行上的地址可能彼此不同#1#2也可能不同。

但是,无论选择何种编译器或优化级别,行#3中打印的 2 个地址总是彼此不同。

这是一个可以玩的演示

那么f在每种情况下返回什么的规则是什么?

c++ pointers language-lawyer temporary-objects

30
推荐指数
2
解决办法
1776
查看次数

指针和参考文献之间的真正区别是什么?

AKA - 对指针的这种迷恋是什么?

只使用了ActionScript,Java和C#这样的现代面向对象语言,我并不真正理解指针的重要性以及它们的用途.我在这里错过了什么?

c pointers reference

29
推荐指数
6
解决办法
5982
查看次数

什么是近,远和巨大的指针?

任何人都可以用适当的例子向我解释这些指针......当这些指针被使用时?

c c++ x86 pointers x86-16

29
推荐指数
3
解决办法
2万
查看次数

传递指针参数,在C++中传递值?

传递指针参数,在C++中传递值?因为我看到指针的任何更改都不会反映在方法之外.我通过解除引用指针所做的更改会被反映出来.

在这种情况下,使用指针指向函数的参数是否可以接受/标准过程来修改函数中的指针值?

c++ pointers function pass-by-value

29
推荐指数
2
解决办法
3万
查看次数

java真的有指针吗?

我在google上寻找答案,但我并不满意.

我的逻辑:

Java 使用内存位置,它只是在你无法看到或访问它的幕后(据我所知,可能有访问它的方法,我不知道).

我的困惑/疑问:

没有指向Java等编程语言的指针的目的是什么,专门用于在任何系统上使用的互联网,而不是像c ++这样使用指针的编程语言?

编辑


你们中许多人都在说"保持简单".如果是这种情况,那么为什么流行的编程语言,比如c++使用指针呢?

c++ java pointers

29
推荐指数
4
解决办法
3万
查看次数

指针数组

我正在尝试实现一个指针数组,以便我可以遍历元素.但是我不确定如何正确地做到这一点:

TYPE(domain),POINTER              :: d01,d02,d03
TYPE(domain),DIMENSION(:),POINTER :: dom
...

dom(1) => d01
dom(2) => d02
dom(3) => d03
...
Run Code Online (Sandbox Code Playgroud)

然后:

...
IF(ASSOCIATED(dom(2),d02))THEN
...
Run Code Online (Sandbox Code Playgroud)

编译器(x86-64 Linux -tp istanbul-64上的pgf90 10.6-0 64位目标)给出了以下错误消息:

 PGF90-S-0074-Illegal number or type of arguments to associated - keyword argument pointer (test_ptr.f90: 10)
  0 inform,   0 warnings,   1 severes, 0 fatal for MAIN
Run Code Online (Sandbox Code Playgroud)

据我所知,如何对指针数组进行子集化是有问题的.两个dom(2)d02是秩0(标量指针).实现这个的正确方法是什么?

谢谢.

arrays fortran pointers fortran90

29
推荐指数
1
解决办法
6184
查看次数

为什么unique_ptr <T>(T*)是显式的?

以下函数无法编译:

std::unique_ptr<int> foo()
{
    int* answer = new int(42);
    return answer;
}

std::unique_ptr<int> bar()
{
    return new int(42);
}
Run Code Online (Sandbox Code Playgroud)

我觉得这有点不方便.std::unique_ptr<T>(T*)明确的理由是什么?

c++ pointers type-conversion unique-ptr c++11

29
推荐指数
2
解决办法
1589
查看次数

指针表达式:**ptr ++,*++*ptr和++**ptr使用

我正在尝试使用C指针文献.在其中一个插图中,我遇到了以下代码.

# include <stdio.h>

int main()
{
     static int a[]={0,1,2,3,4};
     static int *p[]={a, a+1, a+2, a+3, a+4};

     int **ptr;

     ptr =p;

     **ptr++;
     printf("%d %d %d\n", ptr-p, *ptr-a, **ptr);

     *++*ptr; 
     printf("%d %d %d\n", ptr-p, *ptr-a, **ptr);

     ++**ptr;
     printf("%d %d %d\n", ptr-p, *ptr-a, **ptr);

     return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到输出为.

1 1 1
1 2 2
1 2 3
Run Code Online (Sandbox Code Playgroud)

我在为这个输出辩护时遇到了问题.我在副本上制作了很多盒子,以便轻松掌握问题.我能够证明输出的合理性1 1 1,我的麻烦始于声明,*++*ptr.

因为,一元运算符从右到左执行.因此,*ptr将首先处理,然后ptr将增加值.在这个增量之后,我不确定会发生什么,书中说不知何故p也会增加指向此数组中的下一个元素.输出1 2 2只能通过增量来实现p.

我不确定这种问题是否恰好适合stackoverflow.
我尽我所能,浪费了至少10页,上面画着盒子.

任何澄清将不胜感激.

c arrays pointers

29
推荐指数
2
解决办法
5524
查看次数

表达式"(ptr == 0)!=(ptr ==(void*)0)"真的可以吗?

我在@jsantander评论中链接到的论坛帖子中读到了这个说法:

请记住,当您将指针指定或比较为零时,会在幕后发生一些特殊的魔法,以便为给定指针使用正确的模式(实际上可能不为零).这就是为什么之类的东西的原因之一#define NULL (void*)0是邪恶的-如果比较char*NULL那个魔法已明确(可能不知不觉)关闭,无效结果可能发生.只是为了清楚:

(my_char_ptr == 0) != (my_char_ptr == (void*)0)
Run Code Online (Sandbox Code Playgroud)

所以我理解它的方式,对于一个架构,其中NULL指针,比如0xffff代码if (ptr),将比较ptr 0xffff而不是0.

这是真的吗?它是用C++标准描述的吗?

如果为true,则意味着即使对于具有非零NULL指针值的体系结构,也可以安全地使用0.

编辑

作为额外的澄清,请考虑以下代码:

char *ptr;
memset(&ptr, 0, sizeof(ptr));
if ((ptr == (void*)0) && (ptr != 0)) {
    printf("It can happen.\n");
}
Run Code Online (Sandbox Code Playgroud)

这就是我理解这个论坛帖子的主张.

c++ pointers

29
推荐指数
4
解决办法
2083
查看次数