标签: pointers

ALLOCATABLE数组或POINTER数组?

我正在Fortran中编写一个新代码,并且在使用可分配数组或指针数组之间犹豫不决.我在某处读到可分配数组比指针数组有明显优势:

1)效率更高,因为它们在内存中总是连续的

2)没有内存泄漏是可能的

有人能证实吗?你建议使用哪一个?在这两种备选方案之间的代码执行速度方面有什么结果?

arrays fortran pointers memory-management dynamic-memory-allocation

12
推荐指数
1
解决办法
4010
查看次数

指向[-1]数组索引的指针

指针如何指向[-1]数组的索引每次都会产生合法的输出.指针赋值实际发生了什么?

#include<stdio.h>
int main()
{
        int realarray[10];
        int *array = &realarray[-1];

        printf("%p\n", (void *)array);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码输出:

manav@workstation:~/knr$ gcc -Wall -pedantic ptr.c
manav@workstation:~/knr$ ./a.out
0xbf841140
Run Code Online (Sandbox Code Playgroud)

编辑:如果这种情况有效,那么我可以用它来定义一个索引从1开始而不是0的数组,即:array [1],array [2],...

c c++ arrays pointers

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

返回本地char数组的遗留代码是不是错了?

我遇到了一些包含如下函数的遗留代码:

LPCTSTR returnString()
{
    char buffer[50000];
    LPCTSTR t;

    /*Some code here that copies some string into buffer*/

    t = buffer;
    return t; 
}
Run Code Online (Sandbox Code Playgroud)

现在,我强烈怀疑这是错误的.我尝试调用该函数,它确实返回了您希望它返回的字符串.但是,我真的不知道这是怎么发生的:是不是char应该存储在堆栈中的数组,因此在函数退出后解除分配?如果我错了,它存储在堆上,这个函数是不是会造成内存泄漏?

c++ arrays pointers memory-leaks

12
推荐指数
3
解决办法
475
查看次数

派生类和基类之间的指针到指针的转换?

关于以下C++程序:

class Base { };

class Child : public Base { };

int main()
{   
    // Normal: using child as base is allowed
    Child *c = new Child();
    Base *b = c;

    // Double pointers: apparently can't use Child** as Base**
    Child **cc = &c;
    Base **bb = cc;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC在最后一个赋值语句中产生以下错误:

error: invalid conversion from ‘Child**’ to ‘Base**’
Run Code Online (Sandbox Code Playgroud)

我的问题分为两部分:

  1. 为什么没有从Child**到Base**的隐式转换?
  2. 我可以使这个例子使用C风格的演员或者reinterpret_cast.使用这些演员表意味着抛弃所有类型的安全.有没有什么我可以添加到类定义中来隐式地转换这些指针,或者至少以允许我使用的方式表达转换static_cast

c++ inheritance pointers subtyping

12
推荐指数
1
解决办法
3549
查看次数

指针问题是c ++中的"new"运算符

愚蠢的问题,但每当你打电话给新的时,你总是有指针吗?

SomeClass *person = new SomeClass();
Run Code Online (Sandbox Code Playgroud)

那是因为你需要一个指向指向为SomeClass变量人分配的新内存空间的指针吗?谢谢!

c++ pointers

12
推荐指数
1
解决办法
6294
查看次数

游戏训练师如何更改内存中动态的地址?

让我们假设我是一个游戏,我有一个int*包含我健康的全局.游戏训练师的工作是将此值修改为任何内容以实现上帝模式.我已经查阅了游戏培训师的教程,以了解它们是如何工作的,一般的想法是使用内存扫描程序来尝试找到某个值的地址.然后通过注入一个dll或其他来修改这个地址.

但是我创建了一个简单的全局程序,int*每次运行应用程序时它的地址都会发生变化,所以我不知道游戏培训师如何对这些地址进行硬编码?或者我的例子错了吗?

我错过了什么?

pointers memory-address

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

在C中是malloc(256)和malloc(sizeof(char)*256)等价吗?

我看到人们经常编写C代码,例如:

char *ptr = malloc(sizeof(char)*256);
Run Code Online (Sandbox Code Playgroud)

这真的有必要吗?标准说,sizeof(char)==1根据定义,只写这样有意义:

char *ptr = malloc(256);
Run Code Online (Sandbox Code Playgroud)

谢谢,Boda Cydo.

c malloc pointers sizeof

12
推荐指数
2
解决办法
8885
查看次数

DotNet - 什么是int*?

简单的问题,我导入一个DLL函数,参数是int*.当我尝试输入Method(0)时,我收到一条错误,上面写着:"int和int*无法转换".

那是什么意思?

.net c# pointers

12
推荐指数
2
解决办法
2847
查看次数

在C中复制包含char指针的两个结构

复制包含char数组的两个结构的标准方法是什么?

这是一些代码:

#include stdio.h>
#include string.h>
#include stdlib.h>

typedef struct {
    char* name;
    char* surname;
} person;

int main(void){
    person p1;
    person p2;

    p1.name     = (char*)malloc(5);
    p1.surname  = (char*)malloc(5);

    strcpy(p1.name, "AAAA");
    strcpy(p1.surname, "BBBB");

    memcpy(&p2, &p1, sizeof(person));
    free(p1.name);
    printf("%s\n", p2.name);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该行printf("%s\n", p2.name);不打印,因为我释放了缓冲区.

我的结构的问题是它们比struct更大person.它们包含数百个char指针,我必须逐个复制每个成员.

是否有另一种方法来复制包含char数组的两个结构而不使用mallocstrcpy为每个成员?

c struct pointers

12
推荐指数
2
解决办法
7235
查看次数

使用C++中的指针交换数组

我有两个指向双打的指针数组,我需要交换.而不是仅仅复制数组中的数据,将指针交换到数组会更有效.我一直认为数组名称本质上只是指针,但以下代码收到编译器错误:

double left[] = {1,2,3};
double right[] = {9,8,7};

double * swap = left;
left = right; // Error "ISO C++ forbids assignment of arrays"
right = swap; // Error "incompatible types in assignment of `double*' to `double[((unsigned int)((int)numParameters))]'"
Run Code Online (Sandbox Code Playgroud)

动态创建数组可以解决问题,但无法在我的应用程序中完成.我该如何工作?

c++ arrays swap pointers

12
推荐指数
4
解决办法
3万
查看次数