相关疑难解决方法(0)

如何理解"C++允许sizeof(char*)!= sizeof(int*)"?

我读这个帖子这是关系到charbyte,并遇到了下面的话:

一个int*仍然可以被实现为单个硬件指针,因为C++允许sizeof(char*) != sizeof(int*).

如何理解'C++允许sizeof(char*) != sizeof(int*)'?

c++ pointers language-lawyer

9
推荐指数
1
解决办法
524
查看次数

在头文件中大规模转发声明类有哪些风险?

对于每个p1类的指针,class1我们应该考虑使用前向声明class1而不是包含class1头文件来考虑任何风险吗?

我只能看到优势:头文件的大小会更小.

c++

9
推荐指数
1
解决办法
643
查看次数

使用和解除引用(void**)

我想传递一个指向函数的"多态"数组.

我可以在没有警告的情况下做以下事情:

foo (void* ptr);

bar()
{
  int* x;
  ...
  foo(x);
}
Run Code Online (Sandbox Code Playgroud)

gcc显然会自动转换x为a (void*),这只是花花公子.

但是,当我执行以下操作时,我会收到警告:

foo (void** ptr);

bar()
{
  int** x; // an array of pointers to int arrays
  ...
  foo(x);
}

note: expected ‘void **’ but argument is of type ‘int **’
warning: passing argument 1 of ‘foo’ from incompatible pointer type [enabled by default]
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么一个传递(int*)(void*)参数不是"不兼容",但(int**)作为一个(void**)论据是什么?

由于所有指针类型都是相同的大小(对吗?因为我使用了C已经有一段时间了),我仍然可以做类似的事情:

void mainFunc1(int** arr, int len)
{
    //goal is to apply …
Run Code Online (Sandbox Code Playgroud)

c pointers void-pointers pointer-to-array

8
推荐指数
1
解决办法
3928
查看次数

C教程 - 想知道`int i =*(int*)&s;`

通过C教程学习

#include <stdio.h>

int main() {
  short s = 10;
  int i = *(int *)&s; // wonder about this
  printf("%i", i);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我告诉C该地址s是一个int时,它是否应该读取4个字节?

从2字节的最左侧开始s.在这种情况下,这不是非常危险的,因为我不知道它在读什么,因为短路只分配了2个字节?

如果尝试访问我没有分配/属于我的内存,这不应该崩溃吗?

c

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

指针的大小以及该大小是否取决于体系结构

好吧,对不起,这个问题更像是一个一般的文化(还没有找到确切的答案)。

如果我有类似的东西

char * Field
Run Code Online (Sandbox Code Playgroud)

或者

void * Field
Run Code Online (Sandbox Code Playgroud)

或者

double pointers
Run Code Online (Sandbox Code Playgroud)
  • 指针的大小是一样的吗?(据我记得大学时它是 4 个字节,但是......)
  • 指针的大小是否相同取决于 CPU 的架构?
  • 如果我指向一个数据结构,指针本身的大小是一样的,不是吗?

假设 C 中的示例(我倾向于相信其他不直接处理指针的语言也是如此)

c pointers

5
推荐指数
1
解决办法
859
查看次数

从void**转换为char**有多危险

所以我们知道标准不会强制指针大小相等.(这里这里)(而不是谈论函数指针)

我想知道实际上这可能是一个问题.我们知道void *可以容纳任何东西,所以如果指针大小不同,那将是最大的尺寸.鉴于此,指定void **一个char **意味着麻烦.

我的问题是假设void *char *具有相同的大小是多么危险?实际上有一个架构,这不是真的吗?

此外,16位dos不是我想听到的!;)

c pointers void-pointers

5
推荐指数
1
解决办法
296
查看次数

IA-64 中的“GP/功能地址对”是什么意思?

安腾 C++ ABI中的“GP/函数地址对”是什么意思?GP代表什么?

itanium abi

5
推荐指数
1
解决办法
644
查看次数

为什么这个C++代码不会出现编译错误?

#include<iostream>
using namespace std;

struct a{
    int e;
    struct abc *d;
};

struct abc{
    int c;
};

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

我已经定义了我已经声明了结构指针的struct abc后定义.这应该抛出编译错误,因为它在声明之前使用.但是,它没有,为什么?而当我刚刚取代它,而不是,这是给编译错误预期.struct aabcabcstruct abc dstruct abc *d

c++ struct pointers structure

4
推荐指数
2
解决办法
476
查看次数

void*将具有与char指针相同的表示和内存对齐方式

我正在读一本关于" 理解和使用c指针 "的指针的书

说到void *它说

它有两个有趣的属性:

  1. 指向void的指针将具有与指向char的指针相同的表示和内存对齐.

令人困惑的是,所有指针的记忆都不一样吗?他们为什么而不是写void*与它明确提到的char指针的普通指针相同?真的很感激任何帮助

c pointers memory-alignment

4
推荐指数
1
解决办法
957
查看次数

为什么指向函数指针的指针是8字节?

我知道一个函数的指针是8字节,因为虚拟化,但为什么指向函数指针的指针是8字节?

typedef void(*fun())();
sizeof(fun*); // returns 8 byte
Run Code Online (Sandbox Code Playgroud)

c pointers function

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