指针引用类型的åºåˆ—

时间:2019-03-23 20:04:39

标签: c++ pointers pass-by-reference

How to pass a pointer variable as a reference parameter?

关于这个问题,我还有一个问题。

问题的回答者使用int&*作为å‚æ•°æ•°æ®ç±»åž‹ï¼Œä½†æ˜¯æˆ‘ä¸ç†è§£æŒ‡é’ˆå’Œå¼•ç”¨æ•°æ®ç±»åž‹çš„顺åºã€‚

我认为int*& a在我看æ¥æ›´å®žç”¨ï¼Œå› æ­¤æˆ‘å°è¯•ä½¿ç”¨å®ƒè¿›è¡Œç¼–译,但ä¸å…许这样åšã€‚

我想清楚地了解这ç§é€»è¾‘。

我认为int*(int& a)å°±åƒint&*,所以它就åƒæ˜¯å¼•ç”¨çš„指针,但是显然,æ°æ°ç›¸å。

为什么ä¸èƒ½ä½¿ç”¨def l1_prime(): return [(i, 1) for i in mb] 作为指针引用的å«ä¹‰ï¼Ÿ

3 个答案:

答案 0 :(得分:2)

C ++类型以å称为中心。 int*&foo是您应该如何看待它。

首先,我们有&foo-foo是å‚考。å‚考什么? *&foo-指针。指å‘什么的指针? int*&foo一个整数。

原始的C类型规则甚至旨在“演示它们的使用方å¼â€ã€‚因此,int *foo是int = *foo是有效表达å¼çš„简写形å¼ï¼Œæˆ–者*foo是int的缩写。 &并éžå®Œå…¨å¦‚此。

答案 1 :(得分:2)

Clockwise/Spiral Rule

  

è¦éµå¾ªä¸‰ä¸ªç®€å•æ­¥éª¤ï¼š

     
      
  1. 从未知元素开始,沿螺旋/顺时针方å‘移动;在é‡åˆ°ä»¥ä¸‹è¦ç´ æ—¶ï¼Œå°†å…¶æ›¿æ¢ä¸º   相应的英语陈述:[X]或[]   =>数组X大å°ä¸º...或数组未定义大å°ä¸º...(类型1,类型2)   =>函数传递type1å’Œtype2返回...   *   =>指å‘...的指针
  2.   
  3. 继续沿螺旋/顺时针方å‘执行此æ“作,直到所有令牌都被覆盖。
  4.   
  5. 总是先解决括å·ä¸­çš„任何内容ï¼
  6.   
               +---------+  
               | +-----+ |
               | | +-+ | |
               | | ^ | | |
           int * & t ; | |
            ^  ^ ^   | | |
            |  | +---+ | |
            |  +-------+ |
            +------------+

æ¥è‡ªt的状æ€ï¼Œå› æ­¤ï¼š

t是...

然åŽæˆ‘们看到;,因此继续å‰è¿›å¹¶çœ‹åˆ°&,所以

t是对...

的引用

然åŽæˆ‘们看到*

t是对指å‘...

的指针的引用

然åŽæˆ‘们看到int:

t是指å‘int

的指针的引用

这很åˆæƒ…ç†ã€‚现在让我们å°è¯•å¦ä¸€ä¸ªï¼š

               +---------+  
               | +-----+ |
               | | +-+ | |
               | | ^ | | |
           int & * t ; | |
            ^  ^ ^   | | |
            |  | +---+ | |
            |  +-------+ |
            +------------+

æ¥è‡ªt的状æ€ï¼Œå› æ­¤ï¼š

t是...

然åŽæˆ‘们看到;,因此继续å‰è¿›å¹¶çœ‹åˆ°*,所以

t是指å‘...的指针

然åŽæˆ‘们看到&

t是指å‘...

的指针

在这里,我们立å³é‡åˆ°é—®é¢˜ã€‚您没有指å‘引用的指针。引用没有地å€ã€‚

答案 2 :(得分:1)

考虑到符å·çš„å«ä¹‰ï¼Œint&*并没有什么æ„义。

  • int:一ç§æ•°æ®ç±»åž‹
  • x *:指å‘æ•°æ®ç±»åž‹x的指针
  • x &:对数æ®ç±»åž‹x
  • 的引用

我们å¯ä»¥å°†å®ƒä»¬ç»„åˆä¸ºä»¥ä¸‹å¸¸è§å½¢å¼ï¼š

  • int *:指å‘int的指针
  • int &:对int的引用

我会暂åœåœ°è¯´ï¼Œå¸Œæœ›æ‚¨çŸ¥é“the difference between passing by reference and by pointer。如果没有,请å‚è§é“¾æŽ¥ã€‚

但是,我们å¯ä»¥å°è¯•å¦ä¸€ç§ç»„åˆï¼š

  • int *&:对指å‘int的指针的引用。

我们å¯ä»¥åƒè¿™æ ·ä½¿ç”¨int *&: 在呼å«è€…中:

int * myInt= 0;
myfunction(myInt);

在myFunction(int *&myInt)中:

int i;
myInt = &i; 
呼å«è€…中的

myInt int将是i的地å€

  

注æ„:将myInt设置为局部å˜é‡çš„地å€ä¸æ˜¯ä¸€ä¸ªå¥½ä¸»æ„,因为myFunction()结æŸæ—¶ï¼Œå­˜å‚¨åœ¨å…¶ä¸­çš„æ•°æ®å°†è¢«ç ´å。这åªæ˜¯å‡ºäºŽç¤ºä¾‹ç›®çš„

最åŽï¼Œè¿™é‡Œæœ‰ä¸€ä¸ªé—®é¢˜ï¼šint&*

  • int &*:指å‘int引用的指针

现在,我å‘您æ出一个问题:如果我们引用了一个int,为什么我们需è¦ä¸€ä¸ªæŒ‡é’ˆï¼Ÿç­”:我们没有。没é“ç†ã€‚

因此,简而言之:int*&å’Œint&*是两回事。如果将其分解,第一个是有æ„义的,第二个则没有。