标签: pointers

C++函数:&符号和星号

假设您有一个修改变量的函数.

你应该这样写:void myfunc(int *a)或者像这样void myfunc(int &a)

前者强制你调用函数,myfunc(&b)因此调用者知道b将被修改,但后者更短,可以简单地调用myfunc(b).那么哪个更好用?还有什么我想念的吗?

c++ pointers function

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

const之间的区别.指针和参考?

常量指针和引用之间有什么区别?

顾名思义的常量指针不能再绑定.参考的情况也是如此.

我想知道在哪种情况下优先于另一种情况.他们的C++标准及其实现有何不同?

干杯

c++ pointers reference

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

指针可以指向自己吗?

这里提到这个问题.

我的问题是:如果指针变量与其值具有相同的地址,它是否真的指向自身?

例如 - 在下面的代码中,是a一个指向自身的指针?

#include<stdio.h>

int main(){
   int* a;
   int b = (int)&a;
   a = b;
   printf("address of a = %d\n", &a);
   printf("  value of a = %d\n", a);
}
Run Code Online (Sandbox Code Playgroud)

如果a不是指向自身的指针,则同样的问题再次出现:指针可以指向自身吗?
另外,自指向指针有用吗?

c pointers

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

输出参数并通过引用传递

我加入了一个新的小组,其编码指南(对我而言)似乎过时了.

但只是在没有有效备份的情况下反对机器不会让我无处可去.
所以我转向SO,看看我们是否能够理性的理由支持/反对(嘿,我的选择可能是错的,所以我们会赞赏论证的双方).

争论的准则是:

提示:对返回参数使用指针而不是引用.

void Func1( CFoo &Return );  // bad  
void Func2( CFoo *pReturn ); // good  
Run Code Online (Sandbox Code Playgroud)

理由:
使用引用时,它看起来与值相同.调用该函数后,调用者可能会惊讶于他的值已被更改.被调用者可能会无意中修改该值而不会影响调用者的值.通过使用指针,调用者和被调用者都清楚可以更改该值.在代码审查中使用引用可能特别容易引起误解.

c++ pointers coding-style reference

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

`((void(*)())0x1000)();`是什么意思?

这是一个代码,目的是将程序计数器设置为跳转到地址0x1000.我知道它做了什么,但我不明白怎么做.这与我缺乏C语言知识有关.可能你可以赐教.这是声明/功能(我甚至不知道它是什么:))

((void (*)())0x1000)();
Run Code Online (Sandbox Code Playgroud)

我认为它是指向返回void并且不接受任何参数的函数的指针.如果我错了,请纠正我.

c pointers void

39
推荐指数
4
解决办法
3438
查看次数

为什么在C中不允许这个指针算术?

char arr[] = "Hello";
arr = arr + 1;  // error occurs
Run Code Online (Sandbox Code Playgroud)

据我所知,具有数组类型的表达式将转换为指向数组初始元素的指针类型.因此,我期望arr = arr + 1(指向数组的第一个元素(arr)的指针成为指向数组的第二个元素的指针).为什么这不适用于C?

c arrays pointers

39
推荐指数
4
解决办法
4083
查看次数

什么是"数组/指针等价"的现代术语?

几乎每个读这篇文章的人都熟悉这三个关于C的关键事实:

  1. 当您在表达式中提及数组的名称时,它会(大部分时间)计算指向数组第一个元素的指针.
  2. "数组下标"运算符[]与指针一样适用于指针.
  3. 似乎是数组的函数参数实际上声明了一个指针.

这三个事实绝对是C中数组和指针处理的核心.它们甚至不是三个独立的事实; 它们是一个中心概念的相互关联的方面.如果没有对这个概念的正确理解,就不可能正确地进行相当基本的C编程.

我今天的问题很简单,这个概念的名称什么?

我以为我是老式的,但我总是把它称为"C中数组和指针之间的等价",或简称为"数组/指针等价".但我知道你几乎不能在SO上说出这些话; 他们几乎是禁忌.

这可能看起来像一个抽象或哲学问题,所以更具体地构建它,我正在寻找的是一个简单的名词或名词短语我可以在句子中使用"是的,由于_____,数组下标可以被认为是作为指针算术的语法糖",回答,比方说,这个问题.

(但是请注意,我不是在寻找这个问题的答案,也不是为了回答"'等价'这个词有什么问题?".是的,我知道,它会误导学习者想象数组和指针是某种方式同样.当我写这个FAQ列表条目时,我确实有这种困惑.)

c arrays pointers terminology

39
推荐指数
5
解决办法
3961
查看次数

Go的临时地址?

处理这种情况最简洁的方法是什么:

func a() string {
    /* doesn't matter */
}

b *string = &a()
Run Code Online (Sandbox Code Playgroud)

这会生成错误:

不能取一个()的地址

我的理解是,如果采用地址,Go会自动将局部变量提升到堆中.这里很清楚,要采用返回值的地址.处理这个问题的惯用方法是什么?

pointers return temporary rvalue go

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

我们可以在C中返回字符串文字

这段代码有效吗?

const char* foo() {
  return "Hello World";
}
Run Code Online (Sandbox Code Playgroud)

也就是说,从C函数返回"Hello World".

const char* str = foo();
Run Code Online (Sandbox Code Playgroud)

str是一个悬垂的指针吗?

PS:上面的函数是从一些实际代码中抽象出来的.我看到有人编写直接返回字符串文字的代码.

c c++ pointers dangling-pointer

38
推荐指数
0
解决办法
2503
查看次数

指针作为地图C++ STL中的键

我有一个问题,当在地图中用作键时,如何处理指向自定义对象的指针.更具体地说,如果我定义

std::map< CustomClass*, int > foo;
Run Code Online (Sandbox Code Playgroud)

默认的C++实现是否可以处理这些指针?或者我是否需要定义自定义比较器函数来处理它?通常,使用指向对象的指针作为键是一种好习惯吗?

c++ pointers stl map

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