标签: pointers

23
推荐指数
3
解决办法
9932
查看次数

为什么要解引用一个名为dereferencing的指针?

为什么解除引用称为解除引用?

我只是正确地学习指针,我想知道为什么要解除引用.它使我感到困惑,因为它听起来像是要删除引用,而不是通过指向目标的指针.

任何人都可以解释为什么它被称为这个?

对我来说像destination或pointed_to_value这样的东西会更有意义.

c c++ pointers terminology dereference

23
推荐指数
2
解决办法
2126
查看次数

取消引用无效指针,然后获取结果的地址

考虑:

int* ptr = (int*)0xDEADBEEF;
cout << (void*)&*ptr;
Run Code Online (Sandbox Code Playgroud)

*如果它与一个立即使用&并且假设没有超载op&/ 在场,那么它是多么违法op*


(这对解决过去的数组元素有一个特殊的影响&myArray[n],这个表达式明确相当于&*(myArray+n).这个Q&A解决了更广泛的情况,但我不觉得它真的满足了上面的问题.)

c++ pointers

23
推荐指数
2
解决办法
3129
查看次数

关于Pointers To函数声明中的函数

#include<stdio.h>
#include<stdlib.h>

int fun1()
{
    printf("I am fun1.");
    return 0;
}

int fun2(int fun())
{
    fun();
    return 0;
}

int main()
{
    fun2(fun1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的程序可以运行.就我而言,我能理解int fun2(int (*fun)()),但我不知道它是如何int fun2(int fun())运作的.谢谢.

c c++ pointers function-pointers function

23
推荐指数
2
解决办法
897
查看次数

使用intptr_t而不是void*?

使用intptr_t作为通用存储(保存指针和整数值)而不是void*?(如下所示:http://www.crystalspace3d.org/docs/online/manual/Api1_005f0-64_002dBit-Portability-Changes.html)

对于我已经读过的内容:

  • int- > void*- > int往返不保证保持原值; 我猜int- > intptr_t- > int会的
  • 两个指针算术void*intptr_t要求铸件,所以没有在这里得到好处
  • void*表示存储指针时的显式转换次数较少,intptr_t表示存储整数值时转换次数较少
  • intptr_t 需要C99

我还应该考虑什么呢?

c pointers void-pointers intptr 32bit-64bit

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

指针的大小是多少?它究竟依赖于什么?

我在网上搜索,虽然我可以找到一些讨论,但我没有找到全面的描述.因此,如果任何人都可以形成一个涵盖指针大小的答案,那将会有很大的帮助.答案至少应包括以下主题

  1. 指针的大小取决于什么?
  2. 架构的哪些特性会影响指针的大小?(详细地)
  3. 编译器如何影响指针的大小?

c c++ memory pointers

23
推荐指数
2
解决办法
1万
查看次数

指向const成员函数typedef的指针

我知道可以分开创建一个指向成员函数的指针

struct K { void func() {} };
typedef void FuncType();
typedef FuncType K::* MemFuncType;
MemFuncType pF = &K::func;
Run Code Online (Sandbox Code Playgroud)

是否有类似的方法来构造指向const函数的指针?我尝试在各个地方添加const但没有成功.我已经玩了一些gcc,如果你做类似的模板演绎

template <typename Sig, typename Klass>
void deduce(Sig Klass::*);
Run Code Online (Sandbox Code Playgroud)

它会将Sig作为函数签名显示,并在最后添加const.如果要在代码中执行此操作,则会抱怨您无法在函数类型上使用限定符.看起来它应该是可能的,因为演绎有效.

c++ pointers function member

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

新int和new(int)之间c ++的区别是什么?

有什么区别

int * num = new (int);
Run Code Online (Sandbox Code Playgroud)

int * num = new int;
Run Code Online (Sandbox Code Playgroud)

有什么不同吗?

编辑 thx all.......哪一个是最正确的答案?

c++ pointers initialization

22
推荐指数
3
解决办法
6634
查看次数

是否可以重载一个可以从指针告诉固定数组的函数?

动机:

几乎是为了好玩,我试图编写一个函数重载,可以分辨参数是固定大小的数组还是指针.

double const  d[] = {1.,2.,3.};
double a;
double const* p = &a;
f(d); // call array version
f(p); // call pointer version
Run Code Online (Sandbox Code Playgroud)

我发现这特别困难,因为众所周知的事实是数组比指针更快地衰减到指针.一种天真的方法就是写作

void f(double const* c){...}
template<size_t N> void f(double const(&a)[N]){...}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.因为在最好的情况下,编译器确定f(d)上面的数组调用是不明确的.

部分解决方案:

我尝试了很多东西,我能得到的最接近的是以下具体代码.另请注意,在此示例代码中我使用的是char代替double,但最后它非常相似.

首先,我必须使用SFINAE来禁用函数指针版本中的转换(从数组ref到ptr).其次,我不得不为所有可能的数组大小(手动)重载.

[可编码]

#include<type_traits> // for enable_if (use boost enable_if in C++98)
#include<iostream>
template<class Char, typename = typename std::enable_if<std::is_same<Char, char>::value>::type>
void f(Char const* dptr){std::cout << "ptr" << std::endl;} // preferred it seems

void f(char const (&darr)[0] ){std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ arrays pointers c++11

22
推荐指数
4
解决办法
3346
查看次数

这个类型结构定义的指针是什么意思(在C中)?

在K&R第6章中,声明如下:

struct{
    int len;
    char *str;
} *p;
Run Code Online (Sandbox Code Playgroud)

我无法理解这个指针p指向哪个结构,如果这样的指针定义甚至是有效的,因为在书中给出的所有其他示例和我看到的其他示例中,在定义指向结构的指针时,名称需要提及结构,即定义的类型.例如,

struct example{
    int a;
    ...
}s1;
Run Code Online (Sandbox Code Playgroud)

然后,

struct example *ptr = &s1;
Run Code Online (Sandbox Code Playgroud)

所以,提到ptr指向一个类型结构示例而不仅仅是struct.

此外,特别感兴趣的是:

*p-> str获取任何str点;*p-> str ++在访问它指向的任何内容后递增str(就像*s ++);

我无法首先遵循p是什么,因此,也不是增量和解除引用.

这里发生了什么?

提前致谢!

PS我是新来的,所以对这个问题的格式的任何反馈也将不胜感激.

c pointers structure dereference anonymous-struct

22
推荐指数
1
解决办法
812
查看次数