代码:
int *Array[8];
Array[0] = (int *) malloc(sizeof(int) * 5);
printf("%d" , sizeof(Array)/sizeof(int)); // Result = 8 : True
printf("%d" , sizeof(Array[0])/sizeof(int)); // Result = 1 : False
Run Code Online (Sandbox Code Playgroud)
如何获得5的Array [0]的长度?
我有一个我正在编写的网络框架(试图通过UDP实现可靠的层).我有这个接收函数,接受指向数据包对象的指针.然后,网络框架完成一整套内容以接收数据包,并将数据包指针的值设置为此数据包.但这会发生一些深层次的功能.所以我基本上想知道的是,为什么这不适合我的工作:(非常基本的例子向你展示我的意思)
void Main()
{
int* intPointer = NULL;
SomeFunction(intPointer);
//intPointer is still null?
}
void SomeFunction(int* outInt)
{
SomeOtherFunction(outInt);
}
void SomeOtherFunction(int* outInt)
{
outInt = new int(5);
}
Run Code Online (Sandbox Code Playgroud) 我在我的C++程序中声明了以下结构:
struct person {
char name[10]; /* first name */
char id[10]; /* ID number */
off_t pos; /* position in file, for demonstration */
} people[] = {
{ "arnold", "123456789", 0 },
{ "miriam", "987654321", 10240 },
{ "joe", "192837465", 81920 },
};
j = sizeof(people) / sizeof(people[0]); /* count of elements */
Run Code Online (Sandbox Code Playgroud)
这里给出j = 3,即数组中没有元素; 总是即使你添加或减少元素......
但
char b[8];
i = sizeof(b)/sizeof(b[0]);
Run Code Online (Sandbox Code Playgroud)
在我的机器上给出i = a constant = 4的值.
现在这是合理的,因为sizeof(char*)在我的机器上是常量,而sizeof(char)也是常量.
但是一旦我声明了struct person,sizeof(person*)和sizeof(person)也应该是常量,并且它也应该产生一个常量值,不是吗?
我正在尝试构建一个需要1个参数的函数:数字为char []并返回一个以除数作为字符串的char**.
我已经提出了以下功能,它只适用于某些数字.
char** calc_div(char nr[100])
{
int nri,i,ct=0;
char **a = (char**)malloc(sizeof(char*));
nri = atoi(nr);
for(i=0;i<sizeof(char*);i++)
a[i] = (char*)malloc(sizeof(char));
for(i=1;i<=nri;i++)
if(nri % i == 0)
{
sprintf(a[ct++],"%d",i);
}
return a;
}
Run Code Online (Sandbox Code Playgroud)
这适用于22,33,77这样的数字,但不适用于66或88(它只是卡在某处).谁能帮助我?
在Objective C,C和其他指针支持的语言中,*variablename和&variablename之间的区别是什么.这两个都包含地址位置吗?
我有以下代码:
int *pa;
int a[3] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
为什么pa = a没问题,但a = pa是不允许的?
我真的不确定它是什么(如果它是一个指针数组,或指针数组的数组???),但当我通过调试器踩它时它给了我0xCDCDCDCD,意味着内存被分配,但未初始化.谁能告诉我如何初始化它?
谢谢.
char* (*vars)[4];
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的东西,但它会产生编译错误:
for (int i = 0; i < 4; i++)
vars[i] = new char*[new char*][4]; // error C2440: 'initializing' : cannot convert from 'char **' to 'unsigned int'
Run Code Online (Sandbox Code Playgroud) 我遇到了这样的问题:
我有一个头文件:
//first variant:
#ifndef LIBRARIES_H
#define LIBRARIES_H
const char a='4';
#endif // LIBRARIES_H
Run Code Online (Sandbox Code Playgroud)
我将它包含在几个.cpp文件中.一切都很完美.
但突然间,如果我宣布一个指针:
//second variant:
#ifndef LIBRARIES_H
#define LIBRARIES_H
const char *a="asdfgh";
#endif // LIBRARIES_H
Run Code Online (Sandbox Code Playgroud)
请注意,我只声明其中一个(变种).
我只宣告了一次(我试图更改sadfgh或asdfg的名称).
当我尝试第二个变体时,我先删除,反之亦然.
如果我声明一个指向字符串的指针,我将得到错误"多次包含变量".我用qt编译它.我已经删除并重新编译了几次项目.

当然,我可以在main()函数中定义它,但我想知道,这个问题的原因是什么?为什么我不能在头文件中声明指针,然后将它包含在几个源代码文件中?
我知道指针的大小是固定的(不是它指向的数据的大小).现在考虑到这一点,假设我在全局范围内有一个数据向量,并且我声明了指向一些/所有全局数据的指针向量的指针,这将额外使用多少内存(RAM)?我在这里完全不知所措,肯定会感谢一些想法/建议.我希望额外的内存消耗只是向量的大小乘以指针的固定大小(比如8字节),而不管数据的复杂程度如何; 因为它指向的数据存在于全球范围内(即,没有分配新数据;希望我已清楚地解释了我的想法).
一些表达我的问题的伪代码看起来像:
std::vector<data> global_data;
std::vector<data*>* my_data = new std::vector<data*>(); //-Is this even valid?
//-Now populate the vector with pointers to data in global_data
for(int i=0; i<global_data.size(); ++i) {
my_data->push_back(&global_data[i]);
}
Run Code Online (Sandbox Code Playgroud)
然后我的问题是RAM中有多少额外的内存(即,超过已经使用的内存来自创建global_data)被m_data用尽了?
我有一个类,它将被实现为许多实例.我想保持一些实例之间的连接,并在它们之间传递消息.在C++中,我可以这样做:
class A
{
A (*connections)[];
int sum;
public:
void pass(int index)
{
connections[index] -> receive(sum);
}
void receive(int input)
{
sum += input;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我只需要添加其他实例的指针connections[],我可以互相传递消息.
目前我必须使用Python来做这件事,但Python不支持指针.我想知道解决这个问题的正确解决方案或设计模式是什么?
先感谢您.
pointers ×10
c ×5
c++ ×5
arrays ×3
ampersand ×1
declaration ×1
gcc ×1
include ×1
objective-c ×1
parameters ×1
python ×1
sizeof ×1
variables ×1