假设您有一个修改变量的函数.
你应该这样写:void myfunc(int *a)或者像这样void myfunc(int &a)?
前者强制你调用函数,myfunc(&b)因此调用者知道b将被修改,但后者更短,可以简单地调用myfunc(b).那么哪个更好用?还有什么我想念的吗?
常量指针和引用之间有什么区别?
顾名思义的常量指针不能再绑定.参考的情况也是如此.
我想知道在哪种情况下优先于另一种情况.他们的C++标准及其实现有何不同?
干杯
我的问题是:如果指针变量与其值具有相同的地址,它是否真的指向自身?
例如 - 在下面的代码中,是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不是指向自身的指针,则同样的问题再次出现:指针可以指向自身吗?
另外,自指向指针有用吗?
我加入了一个新的小组,其编码指南(对我而言)似乎过时了.
但只是在没有有效备份的情况下反对机器不会让我无处可去.
所以我转向SO,看看我们是否能够理性的理由支持/反对(嘿,我的选择可能是错的,所以我们会赞赏论证的双方).
争论的准则是:
提示:对返回参数使用指针而不是引用.
Run Code Online (Sandbox Code Playgroud)void Func1( CFoo &Return ); // bad void Func2( CFoo *pReturn ); // good理由:
使用引用时,它看起来与值相同.调用该函数后,调用者可能会惊讶于他的值已被更改.被调用者可能会无意中修改该值而不会影响调用者的值.通过使用指针,调用者和被调用者都清楚可以更改该值.在代码审查中使用引用可能特别容易引起误解.
这是一个代码,目的是将程序计数器设置为跳转到地址0x1000.我知道它做了什么,但我不明白怎么做.这与我缺乏C语言知识有关.可能你可以赐教.这是声明/功能(我甚至不知道它是什么:))
((void (*)())0x1000)();
Run Code Online (Sandbox Code Playgroud)
我认为它是指向返回void并且不接受任何参数的函数的指针.如果我错了,请纠正我.
char arr[] = "Hello";
arr = arr + 1; // error occurs
Run Code Online (Sandbox Code Playgroud)
据我所知,具有数组类型的表达式将转换为指向数组初始元素的指针类型.因此,我期望arr = arr + 1(指向数组的第一个元素(arr)的指针成为指向数组的第二个元素的指针).为什么这不适用于C?
几乎每个读这篇文章的人都熟悉这三个关于C的关键事实:
[]与指针一样适用于指针.这三个事实绝对是C中数组和指针处理的核心.它们甚至不是三个独立的事实; 它们是一个中心概念的相互关联的方面.如果没有对这个概念的正确理解,就不可能正确地进行相当基本的C编程.
我今天的问题很简单,这个概念的名称是什么?
我以为我是老式的,但我总是把它称为"C中数组和指针之间的等价",或简称为"数组/指针等价".但我知道你几乎不能在SO上说出这些话; 他们几乎是禁忌.
这可能看起来像一个抽象或哲学问题,所以更具体地构建它,我正在寻找的是一个简单的名词或名词短语我可以在句子中使用"是的,由于_____,数组下标可以被认为是作为指针算术的语法糖",回答,比方说,这个问题.
(但是请注意,我不是在寻找这个问题的答案,也不是为了回答"'等价'这个词有什么问题?".是的,我知道,它会误导学习者想象数组和指针是某种方式同样.当我写这个FAQ列表条目时,我确实有这种困惑.)
处理这种情况最简洁的方法是什么:
func a() string {
/* doesn't matter */
}
b *string = &a()
Run Code Online (Sandbox Code Playgroud)
这会生成错误:
不能取一个()的地址
我的理解是,如果采用地址,Go会自动将局部变量提升到堆中.这里很清楚,要采用返回值的地址.处理这个问题的惯用方法是什么?
这段代码有效吗?
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:上面的函数是从一些实际代码中抽象出来的.我看到有人编写直接返回字符串文字的代码.
我有一个问题,当在地图中用作键时,如何处理指向自定义对象的指针.更具体地说,如果我定义
std::map< CustomClass*, int > foo;
Run Code Online (Sandbox Code Playgroud)
默认的C++实现是否可以处理这些指针?或者我是否需要定义自定义比较器函数来处理它?通常,使用指向对象的指针作为键是一种好习惯吗?