struct node
{
int info;
struct node *llink;
struct node *rlink;
};
typedef node *nodep;
Run Code Online (Sandbox Code Playgroud)
在该结构本身内部有一个结构指针是什么意思?
请详细解释上述结构.
PS
我不是在谈论树木的逻辑.我在谈论C结构和指针的行为.
struct node *llink如何将内存分配给它?这是一种尚未形成的类型?
鉴于这些是允许的:
char c[] = "abc";
char c[] = {'a','b','c','\0'}
char *c = "abc";
Run Code Online (Sandbox Code Playgroud)
为什么不允许这样做?
char *c = {'a','b','c','\0'}; // error: a char cannot initialize a char*
Run Code Online (Sandbox Code Playgroud)
如果编译器将字符串文字解释为以字符结尾的字符数组,那么我认为它等同于上面的语句3,不是吗?
同样,为什么不允许这样做:
int arr[3];
int *i = arr; // OK
int *i = {1,2,3} // error: an int cannot initialize an int*
Run Code Online (Sandbox Code Playgroud)
这不是一个大问题,我只是好奇..我猜这个问题归结为字符串文字(或声明的整数数组)和字符元素数组在分配指针时有什么区别?
我有一个回调程序:
type
TInitCallback = procedure (var Data: Pointer);
Run Code Online (Sandbox Code Playgroud)
这个想法是在初始化之后Data可以指向任何东西.
我试图将这个过程分配给回调和init Data,它应该指向一个新创建的数组:
type
TBoolArray = array of Boolean;
procedure InitData(var Data: Pointer);
var
BoolArray: TBoolArray;
i: Integer;
begin
SetLength(BoolArray, 10);
for i := 0 to Length(BoolArray) - 1 do
BoolArray[i] := False;
Data := BoolArray;
end;
Run Code Online (Sandbox Code Playgroud)
但是,在分配时,我不确定数组的引用计数器是否增加:Data := BoolArray;.换句话说 - 我不确定该数组在离开程序后仍然在内存中还是已被释放?
因为稍后在程序执行中,当我更改某些其他结构中的数据(与该数组无关的记录)时,此更改会在先前分配的数组(Data)中进行更改.
对此的一种解释是,在离开回调时释放了数组的内存,并再次重新用于记录.
那么,在离开InitData回调之后数组是否保持分配状态?如果没有,如何让它保持分配.请注意,我不想更改回调的签名,我不能引入任何新的参数或将其更改为函数.
谢谢.
delphi pointers memory-management delphi-2009 dynamic-arrays
我在VS 2008中研究的一段C++代码有一个糟糕的指针.指针已正确初始化,并且只有很少的代码行引用它.我在调试时把手表放在这个指针上.
当调用某个方法时,指针的值突然从0x05fe0040""变为0x00000000 Bad Ptr(在VS2008的Watch窗口中).我无法弄清楚为什么会这样.代码行之间的指针没有操作,它会丢失其值.
我该如何进一步调查?这个指针变坏的原因是什么?
我是C++编程的新手,并且是第一次使用VS2008,所以请解释您认为相关的任何内容.
c++ pointers watch visual-studio-2008 visual-studio-debugging
我尝试了一些代码来检查数组和指针的行为.其内容如下.
#include <stdio.h>
main(){
int s[]={1,2};
int *b=s;
printf("%d, %d, %d\n", s, &s, *s);
printf("%d, %d, %d\n", b ,&b, *b);
}
Run Code Online (Sandbox Code Playgroud)
最初我认为指针和数组是相同的但是......
令我惊讶的是,'s'和'&s'的值与'b'不同.这是否意味着一个数组变量"指向自己?"
我现在也对变量"名称"实际上是什么感到困惑?如何与内存中的位置进行绑定?我只是无法想象那里发生的事情!内存(RAM)中的所有信息都是在运行时存储的?
我想知道我是否有2个指针指向相同的对象,然后我使用指针1删除它,它仍然在内存中,指针2将指向null,或者对象将保留在内存中我需要使用删除指针2来免费吗?
我的意思是:
int *p1, *p2;
p1=new int;
p2=p1;
*p1=5;
p2=p1;
delete p1;
int x=*p2;
//Error or x=5?
Run Code Online (Sandbox Code Playgroud) 我有一个小程序来计算彼此的行星的力量.我的程序有两个结构数组,一个在迭代前保持位置和速度,另一个保持迭代后它们的位置和速度.
在每次迭代结束时,我想将第二个数组中的值移动到第一个数组中,第二个数组可能变为垃圾(但需要指向我稍后可以写入的一些有效内存位置).我以为我可以简单地切换数组,因为数组是指针,但编译器不会让我.
考虑这个例子:
typedef struct { int a; } Foo;
int main()
{
Foo bar[8], baz[8];
Foo *temp = baz;
baz = bar; //ISO C++ forbids the assignment of arrays
bar = temp; //incompatible types in assignment of Foo* to Foo[8]
}
Run Code Online (Sandbox Code Playgroud)
这就是我想做的.它肯定比从1到N的for循环更快.
我试图struct some_struct在C中声明一个指针数组
我可不可以做:
some_struct* arr[10];
Run Code Online (Sandbox Code Playgroud)
代替:
some_struct** arr=(some_struct**)malloc(10*sizeof(some_struct*));
Run Code Online (Sandbox Code Playgroud)
有什么区别?
我是C++的这些重要功能的新手,我已经在这里阅读了一些关于这些主题的问题/答案,并搜索了一些文档.但我仍然对此感到困惑......
如果有人可以建议我一些好的在线教程或书籍章节,这将很容易和慢,并从基本开始它将是伟大的.
此外,如果有人知道一些很好的现有运动材料.
我现在正在课堂上开始动态内存分配并对它有一个正确的理解,但不能完全正确使用它.我觉得我的指针可能也不是那么好:p
我的讲师给出了创建名为readArray的函数的指令,该函数将提示用户输入一个数字作为大小来动态创建该大小的整数数组.然后我将新数组分配给指针.然后我应该提示用户填充数组.然后我应该返回新创建的数组和大小.
我无法弄清楚如何返回数组,我想在动态分配内存时,你应该在使用后删除分配以防止泄漏.
必须将数组和大小返回到main,以便将其传递给其他函数,例如排序函数.
我非常感谢我能得到的任何帮助,因为我的思维过程一直朝着错误的方向前进.
#include <iostream>
using namespace std;
int* readArray(int&);
void sortArray(int *, const int * );
int main ()
{
int size = 0;
int *arrPTR = readArray(size);
const int *sizePTR = &size;
sortArray(arrPTR, sizePTR);
cout<<arrPTR[1]<<arrPTR[2]<<arrPTR[3]<<arrPTR[4];
system("pause");
return 0;
}
int* readArray(int &size)
{
cout<<"Enter a number for size of array.\n";
cin>>size;
arrPTR = new int[size];
for(int count = 0; count < (size-1); count++)
{
cout<<"Enter positive numbers to completely fill the array.\n";
cin>>*(arrPTR+count);
} …Run Code Online (Sandbox Code Playgroud)