相关疑难解决方法(0)

理解指针有什么障碍,克服它们可以做些什么?

对于C或C++中的许多新的,甚至是老的大学生来说,为什么指针会成为混乱的主要因素?是否有任何工具或思维过程可以帮助您理解指针在变量,函数和更高级别的工作方式?

有什么好的做法可以让人达到"啊哈,我明白了"的水平,而不会让他们陷入整体概念的困境?基本上,钻取方案.

c c++ pointers

443
推荐指数
16
解决办法
7万
查看次数

C++ 中所有指针的大小都相同吗?

最近,我看到这样的说法

所有指针具有相同的大小是很常见的,但从技术上讲,指针类型具有不同的大小是可能的

但后来我发现了这样的内容:

虽然指针的大小都是相同的,因为它们只存储内存地址,但我们必须知道它们指向什么类型的东西。

现在,我不确定以上哪种说法是正确的。第二个引用的语句看起来像是来自佛罗里达州立大学计算机科学的 C++ 笔记。


这就是为什么在我看来所有指针都应该具有相同的大小:

1)假设我们有:

int i = 0;
void* ptr = &i; 
Run Code Online (Sandbox Code Playgroud)

现在,假设 C++ 标准允许指针具有不同的大小。进一步假设在某些任意机器/编译器上(因为标准允许),a 的void*大小为 2 字节,而 a 的int*大小为 4 字节。

现在,我认为这里有一个问题,即右侧有一个int*大小为 4 字节的 ,而左侧有一个void*大小为 2 字节的 。int*因此,当从到发生隐式转换时,void*将会丢失一些信息

2)所有指针都保存地址。由于对于给定的机器,所有地址都具有相同的大小,因此所有指针也应该具有相同的大小是非常自然(合乎逻辑的)。

因此,我认为第二句话是正确的。


我的第一个问题是 C++ 标准对此有何规定?

我的第二个问题是,如果 C++ 标准确实允许指针具有不同的大小,那么有理由吗?我的意思是允许指针具有不同的大小对我来说似乎有点不自然(考虑到我上面解释的两点)。所以,我很确定标准委员会一定已经考虑到了这一点(指针可以有不同的大小),并且已经有理由允许指针有不同的大小。请注意,只有当标准确实允许指针具有不同的大小时,我才会问这个(第二个问题)。

c++ pointers void-pointers language-lawyer pointer-conversion

56
推荐指数
5
解决办法
8669
查看次数

46
推荐指数
6
解决办法
9050
查看次数

指针的大小在C中是否有所不同?

可能的重复:
指针的大小可能会变化,具体取决于指向的内容?
是否有任何平台指向不同类型的指针有不同的大小?

指向c中浮点的指针大小是否可能与指向int的指针不同?尝试过之后,我得到了各种指针的相同结果.

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

int main()
{
    printf("sizeof(int*): %i\n", sizeof(int*));
    printf("sizeof(float*): %i\n", sizeof(float*));
    printf("sizeof(void*): %i\n", sizeof(void*));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里有哪些输出(OSX 10.6 64位)

sizeof(int*): 8
sizeof(float*): 8
sizeof(void*): 8
Run Code Online (Sandbox Code Playgroud)

我可以假设不同类型的指针具有相同的大小(当然在一个拱门上)?

c pointers

30
推荐指数
7
解决办法
5万
查看次数

在数组char指针的情况下,'数组名称'是什么意思?

在我的代码中:

 char *str[] = {"forgs", "do", "not", "die"};
 printf("%d %d", sizeof(str), sizeof(str[0]));  
Run Code Online (Sandbox Code Playgroud)

我得到了输出12 2,所以我怀疑是:

  1. 为什么会有区别?
  2. 这两个strstr[0]是字符指针,对不对?

c pointers sizeof

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

指针的大小可以在数据和函数指针之间变化吗?

我刚刚阅读了关于指针C FAQ部分.

它讨论了无法使用void *指针来保存函数指针,因为指向数据的指针和指向函数的指针在某些平台上可能具有不同的大小,并且void *只能保证足够大以保存指向数据的指针.

任何人都可以举一个平台的例子,其中指向数据的指针和指向函数的指针实际上有不同的大小?

c pointers

21
推荐指数
5
解决办法
7923
查看次数

Void**一个通用指针?

void *是一个通用指针,但是呢void **?是void **也一个通用的指针?

我们可以强制转换void **int **,char **等等.

我会感谢堆栈溢出系列的任何信息.

c c++

20
推荐指数
3
解决办法
4471
查看次数

在C中获取指针的大小

如何使用C获取指针的大小sizeof?我想malloc一些内存来存储指针(不是指向的值).

c pointers sizeof

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

在不同平台上使用void指针

我听说指针首先应该转换为void以确保不同平台上的值的一致性,并且应该使用%p格式说明符.它为什么以及究竟是什么问题?

int x=100;
int *pi=&x;
printf("value of pi is: %p",(void*)pi);
Run Code Online (Sandbox Code Playgroud)

c pointers void-pointers format-specifiers

13
推荐指数
3
解决办法
976
查看次数

是否有任何reinterpret_cast改变指针值的真实例子?

根据C++标准,一个reinterpret_cast指向T*其他类型指针的指针Q* 可以根据实现改变或不改变指针值.

我很感兴趣 - 它有一个C++实现的真实例子,其中通过reinterpret_cast更改指针来转换指向其他指针类型的指针?什么和为什么改变了?

c++ compiler-construction casting

10
推荐指数
1
解决办法
5924
查看次数