标签: pointers

为什么引用在C++中不可重用

C++引用有两个属性:

  • 他们总是指向同一个对象.
  • 他们不能是0.

指针是相反的:

  • 他们可以指向不同的对象.
  • 他们可以是0.

为什么C++中没有"不可为空,可重复的引用或指针"?我想不出为什么参考不应该是可重复的一个很好的理由.

编辑: 问题经常出现,因为我通常使用引用,当我想确保"关联"(我在这里避免使用"引用"或"指针")永远无效.

我认为我从没想过"这个引用始终指的是同一个对象".如果引用是可重用的,那么仍然可以得到当前的行为:

int i = 3;
int& const j = i;
Run Code Online (Sandbox Code Playgroud)

这已经是合法的C++,但毫无意义.

我重申我的问题: "'引用的背后什么原因是对象'设计?为什么引用始终是同一个对象,而不是仅当声明为const时才被认为是有用的?"

干杯,菲利克斯

c++ pointers language-design reference

68
推荐指数
6
解决办法
2万
查看次数

输入deff指针是个好主意吗?

我查看了一些代码并发现惯例是将指针类型转换为

SomeStruct* 
Run Code Online (Sandbox Code Playgroud)

typedef SomeStruct* pSomeStruct;
Run Code Online (Sandbox Code Playgroud)

这有什么好处吗?

c c++ pointers typedef conventions

68
推荐指数
9
解决办法
4万
查看次数

指针指向的int的增量值

我有一个int指针(int*count),如果我想增加使用++指向的整数,我以为我会调用

*count++;
Run Code Online (Sandbox Code Playgroud)

但是,我收到一个构建警告"表达结果未使用".我可以打电话

*count += 1;
Run Code Online (Sandbox Code Playgroud)

但是,我想知道如何使用++.有任何想法吗?

c pointers increment post-increment

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

如何从C中的指针获取数组的大小?

我已经分配了一个像这样mystruct大小的"数组" n:

if (NULL == (p = calloc(sizeof(struct mystruct) * n,1))) {
 /* handle error */
}
Run Code Online (Sandbox Code Playgroud)

后来,我只能访问p,不再拥有n.有没有办法只给出指针确定数组的长度p

我认为它必须是可能的,因为free(p)就是这样.我知道malloc()它记录了它分配了多少内存,这就是它知道长度的原因; 也许有办法查询这些信息?就像是...

int length = askMallocLibraryHowMuchMemoryWasAlloced(p) / sizeof(mystruct)
Run Code Online (Sandbox Code Playgroud)

我知道我应该修改代码,以便我知道n,但如果可能,我宁愿不这样做.有任何想法吗?

c malloc pointers memory-management

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

C++:函数/方法声明中的&符号"&"和星号"*"之间的区别?

那些之间是否有某种微妙的区别:

void a1(float &b) {
    b=1;
};
a1(b);
Run Code Online (Sandbox Code Playgroud)

void a1(float *b) {
    (*b)=1;
};
a1(&b);
Run Code Online (Sandbox Code Playgroud)

它们都是相同的(或者看起来似乎来自main()),但第一个显然更短,但我看到的大部分代码都使用第二种表示法.有区别吗?也许万一它是一些对象而不是浮动?

c++ pointers reference

66
推荐指数
4
解决办法
6万
查看次数

在C++中使用指向动态分配对象的指针向量时,如何避免内存泄漏?

我正在使用一个指向对象的向量.这些对象派生自基类,并且正在动态分配和存储.

例如,我有类似的东西:

vector<Enemy*> Enemies;
Run Code Online (Sandbox Code Playgroud)

我将从Enemy类派生,然后为派生类动态分配内存,如下所示:

enemies.push_back(new Monster());
Run Code Online (Sandbox Code Playgroud)

为了避免内存泄漏和其他问题,我需要注意哪些事项?

c++ pointers stl vector derived

66
推荐指数
3
解决办法
9万
查看次数

如何解除引用函数指针?

为什么以及如何解除引用函数指针只是"什么都不做"?

这就是我所说的:

#include<stdio.h>

void hello() { printf("hello"); }

int main(void) { 
    (*****hello)(); 
}
Run Code Online (Sandbox Code Playgroud)

来自这里的评论:

函数指针解除引用就好了,但生成的函数指示符会立即转换回函数指针


这里的答案:

解除引用(以你认为的方式)函数的指针意味着:访问CODE内存,因为它将是一个DATA内存.

不应该以这种方式取消引用函数指针.相反,它被称为.

我会使用"dereference"这个名字与"call"并排使用.没关系.

无论如何:C的设计方式是函数名称标识符和变量保持函数的指针都是相同的:地址到CODE内存.它允许通过在标识符或变量上使用call()语法来跳转到该内存.


如何准确地不提领一个函数指针的工作?

c c++ pointers function-pointers

66
推荐指数
2
解决办法
3万
查看次数

python变量是指针?

据我所知,Python中的变量只是指针.

基于此规则,我可以假设此代码段的结果:

i = 5
j = i
j = 3 
print(i)
Run Code Online (Sandbox Code Playgroud)

会的3.但是我得到了一个意想不到的结果,是的5.

此外,我的Python书确实涵盖了这个例子:

i = [1,2,3]
j = i
i[0] = 5
print(j)
Run Code Online (Sandbox Code Playgroud)

结果将是[5,2,3].

我理解错了什么?

python variables pointers identifier

66
推荐指数
5
解决办法
6万
查看次数

范围引用而不是值

我看到该范围返回键和值的"副本".该范围是否有办法返回该项目的地址?例

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    for _, e := range array {
        e.field = "foo"
    }

    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}
Run Code Online (Sandbox Code Playgroud)

http://play.golang.org/p/AFOGG9NGpx

这里"字段"没有被修改,因为范围发送字段的副本,我是否必须使用索引或是否有任何其他方法来修改值?

谢谢阅读.

pointers reference go

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

从函数返回char*和char []有什么区别?

为什么第一个函数返回字符串"Hello,World",但第二个函数不返回任何内容.我认为两个函数的返回值都是未定义的,因为它们返回的数据超出了范围.

#include <stdio.h>
// This successfully returns "Hello, World"
char* function1()
{
    char* string = "Hello, World!";
    return string;
}
// This returns nothing
char* function2()
{
    char string[] = "Hello, World!";
    return string; 
}

int main()
{
    char* foo1 = function1();
    printf("%s\n", foo1); // Prints "Hello, World"
    printf("------------\n");
    char* foo2 = function2(); // Prints nothing
    printf("%s\n", foo2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c string pointers

66
推荐指数
4
解决办法
4729
查看次数