Questions tagged «pointers»

“指向”存储在内存中的另一个值的数据类型。指针变量包含某个其他实体(变量或函数或其他实体)的内存地址。此标记应用于涉及使用指针而不是引用的问题。使用指针的最常见的编程语言是C,C ++,Go和汇编语言。使用特定的语言标签。其他有用的标记是描述指针用法的方法,函数,结构等。

3
范围引用代替值
我看到该范围返回键和值的“副本”。有没有办法让该范围返回该商品的地址?例 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("--") } } http://play.golang.org/p/AFOGG9NGpx 这里“ field”没有被修改,因为range发送了field的副本,我是否必须使用index还是有其他方法可以修改值? 谢谢阅读。
90 pointers  reference  go 

4
int(*)(int *)= 5(或任何整数值)的含义
我无法弄清楚: int main() { int (*) (int *) = 5; return 0; } 上面的分配使用g ++ c ++ 11进行编译。我知道这int (*) (int *)是一个指向接受(int *)as参数并返回int的函数的指针,但我不明白您如何将其等同于5。起初,我认为这是一个不断返回5的函数(根据我最近的学习F#,可能是哈哈),然后,我简要地想到了,该函数指针指向内存位置5,但这显然不起作用,十六进制值也不起作用。 认为可能是因为该函数返回一个int,并且分配一个int是可以的(以某种方式),所以我也尝试这样做: int * (*) (int *) = my_ptr wheremy_ptr是type int *,与第二个函数指针的类型相同,第一种情况是int类型。这不会编译。分配5或任何int值而不是my_ptr都不会为此函数指针编译。 那任务是什么意思呢? 更新1 我们已确认这是一个错误,如最佳答案所示。但是,仍然不知道分配给函数指针的值实际发生了什么,或者分配发生了什么。任何(良好)的解释将不胜感激!请参考下面的编辑以更清楚地了解该问题。 编辑1 我正在使用gcc版本4.8.2(在Ubuntu 4.8.2中) 编辑2 实际上,将其等同于对我的编译器有效的任何东西。甚至将其等同于std :: string变量,或者返回双精度值的函数名称,都可以使用。 编辑2.1 有趣的是,使其成为指向返回非指针数据类型的任何函数的函数指针,将使其进行编译,例如 std::string (*) () = 5.6; …

6
如何比较指针?
假设我有2个指针: int *a = something; int *b = something; 如果我想比较它们,看看它们是否指向同一个地方,则(a == b)是否有效?
88 c++  pointers 



10
C#引用和指针之间有什么区别?
我不太了解C#引用和指针之间的区别。它们都指向内存中的位置,不是吗?我能弄清的唯一区别是,指针不那么聪明,不能指向堆上的任何东西,可以免于垃圾回收,并且只能引用结构或基本类型。 我问的原因之一是,人们认为要成为一名优秀的程序员,人们需要很好地理解指针(我猜是C)。许多学习高级语言的人都错过了这一点,因此有这个缺点。 我只是不了解指针的复杂性?它基本上只是对内存中位置的引用,不是吗?它可以返回其位置并直接与该位置的对象进行交互吗? 我错过了重点吗?
85 c#  pointers  reference 

3
自C ++ 17起,具有正确地址和类型的指针仍然始终是有效的指针吗?
(参考此问答)。 在C ++ 17标准之前,[basic.compound] / 3中包含以下句子: 如果类型T的对象位于地址A,则将其值为地址A的cv T *类型的指针指向该对象,而不管如何获取该值。 但是从C ++ 17开始,此句子已删除。 例如,我相信这句话使此示例代码已定义,并且由于C ++ 17,这是未定义的行为: alignas(int) unsigned char buffer[2*sizeof(int)]; auto p1=new(buffer) int{}; auto p2=new(p1+1) int{}; *(p1+1)=10; 在C ++ 17之前,p1+1持有的地址*p2并具有正确的类型,因此*(p1+1)是的指针*p2。在C ++ 17p1+1中,指针是一个end-the-end,因此它不是指向对象的指针,并且我相信它是不可引用的。 是对标准权利的这种修改的解释,还是有其他规则可以补偿所引用句子的删除?


5
“ int * nums = {5,2,1,4}”导致分段错误
int *nums = {5, 2, 1, 4}; printf("%d\n", nums[0]); 导致段错误,而 int nums[] = {5, 2, 1, 4}; printf("%d\n", nums[0]); 没有。现在: int *nums = {5, 2, 1, 4}; printf("%d\n", nums); 打印5。 基于此,我猜想数组初始化符号{}将数据盲目地加载到左侧的任何变量中。当它为int []时,将根据需要填充数组。当它为int *时,指针将被5填充,指针存储之后的内存位置将被2、1和4填充。因此nums [0]尝试取消引用5,从而导致段错误。 如果我错了,请纠正我。如果我是正确的,请详细说明,因为我不理解为什么数组初始化程序会以它们的方式工作。
81 c  arrays  pointers 

9
是python变量指针吗?否则他们是什么?
据我所知,Python中的变量只是指针。 基于此规则,我可以假定此代码段的结果为: i = 5 j = i j = 3 print(i) 会是3。但是我得到了一个意想不到的结果,那就是5。 此外,我的Python书确实涵盖了以下示例: i = [1,2,3] j = i i[0] = 5 print(j) 结果将是[5,2,3]。 我理解错了什么?

6
const char *和char const *-相同吗?
据我了解,const修饰语应从右至左阅读。从中我得到: const char* 是一个指针,其char元素不能被修改,但是指针本身可以被修改,并且 char const* 是mutablechar的常量指针。 但是,以下代码出现以下错误: const char* x = new char[20]; x = new char[30]; //this works, as expected x[0] = 'a'; //gives an error as expected char const* y = new char[20]; y = new char[20]; //this works, although the pointer should be const (right?) y[0] …

3
Boost:assert.hpp文件中的P :: ************是什么意思?
在boost / mpl / assert.hpp中,我看到了以下内容: template<class Pred> struct eval_assert { typedef typename extract_assert_pred<Pred>::type P; typedef typename P::type p_type; typedef typename ::boost::mpl::if_c<p_type::value, AUX778076_ASSERT_ARG(assert<false>), failed ************ P::************ >::type type; }; 如果************可以将第一个视为struct的指针失败,那么P::************对我来说真的没有任何意义。这是标准的C ++吗?
80 c++  pointers  boost 


6
在C中打印地址或指针以获取值
我想做一些看起来很简单的事情。我得到结果,但是问题是,我无法知道结果是否正确。 我在C语言中工作,有两个指针。我想打印指针的内容。我不想取消引用指针以获取指向的值,我只想要指针已存储的地址。 我编写了以下代码,我需要知道的是,是否正确,如何更正。 /* item one is a parameter and it comes in as: const void* item1 */ const Emp* emp1 = (const Emp*) item1; printf("\n comp1-> emp1 = %p; item1 = %p \n", emp1, item1 ); 在我发布此内容时(以及正确的原因很重要)是,我最终需要针对指针到指针进行此操作。那是: const Emp** emp1 = (const Emp**) item1;

13
C#中的引用类型
考虑以下代码: public class Program { private static void Main(string[] args) { var person1 = new Person { Name = "Test" }; Console.WriteLine(person1.Name); Person person2 = person1; person2.Name = "Shahrooz"; Console.WriteLine(person1.Name); //Output: Shahrooz person2 = null; Console.WriteLine(person1.Name); //Output: Shahrooz } } public class Person { public string Name { get; set; …
79 c#  .net  pointers 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.