int*i和int**i之间的区别

M2s*_*tar 10 c c++ pointers

int* i 和之间有什么区别int** i

RJF*_*ner 24

指向整数值的指针

int* i
Run Code Online (Sandbox Code Playgroud)


指向整数值的指针

int** i
Run Code Online (Sandbox Code Playgroud)

(即,在第二种情况下,您将需要两个dereferrence来访问整数的值)


Kla*_*aim 10

  • int* i:i是指向类型对象的指针int
  • int** i:i是指向类型对象的指针的指针int
  • int*** i:i是指向指向类型对象的指针的指针int
  • int**** i:i是指向指向类型对象的指针的指针的指针int
  • ...

  • @Nathan不在`new int`.这里没有变量.用`object`替换`variable`是合适的. (4认同)
  • *"......指向变量的指针......"*不一定是变量.事实上,在这种情况下,"变量"这个词可能会掩盖一些含义. (3认同)

Pra*_*rav 8

int*pi

pi 是一个指向整数的指针

int**ppi

ppi 是指向整数的指针.

编辑:

你需要阅读一本关于指针的好书.我推荐Kenneth Reek的C指针.


pmg*_*pmg 7

假设你是一名老师,必须给你的一个学生做笔记。

int note;
Run Code Online (Sandbox Code Playgroud)

嗯……我是说全班

int *class_note; /* class_note[0]: note for Adam; class_note[1]: note for Brian; ... */
Run Code Online (Sandbox Code Playgroud)

嗯……别忘了你有几门课

int **classes_notes; /* classes_notes[0][2]: note for Charles in class 0; ... */
Run Code Online (Sandbox Code Playgroud)

而且,你还在几家机构任教

int ***intitute_note; /* institute_note[1][1][1]: note for David in class 1 of institute 1 */
Run Code Online (Sandbox Code Playgroud)

等等等等...

  • 这并不能向初学者解释任何事情。 (4认同)

pou*_*def 6

我不认为这是opencv特有的.

int *i声明指向int的指针.因此i存储一个内存地址,C期望该内存地址的内容包含一个int.

int **i正在声明一个指针......指针.到一个int.因此i包含一个地址,并且在该内存地址处,C期望看到另一个指针.那么,第二个内存地址应该保持一个int.

请注意,在声明指向int的指针时,不会分配实际的int.因此,有效说int *i = 23,"我有一个变量,我希望它指向内存地址23,它将包含一个int." 但是如果你试图实际读取或写入内存地址23,你可能会发生段错误,因为你的程序没有"拥有"那块RAM.*i = 100会段错的.(解决方案是使用malloc().或者你可以使它指向一个现有的变量,如int j = 5; int *i = &j)