int **m,**s;是啥意思?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了int **m,**s;是啥意思?相关的知识,希望对你有一定的参考价值。
此语句定义了两个指向地址的指针,两个地址中都存放了整型的变量,就好像一个装着整型变量的盒子,即表示为*m,再用一个盒子装着,就是**m,m里面存放的是当前指向整型变量的地址的地址,*m表示的是指向整型变量的地址,**m就指的是整型变量,定义的时候必须使用int **m;的语句,以表明变量的类型。希望能够帮到您! 参考技术A 这是指向指针的指针,在编程中是不推荐使用的,除了考试刁难人int[]是啥意思
【中文标题】int[]是啥意思【英文标题】:What is the meaning of int[]int[]是什么意思 【发布时间】:2015-08-28 13:46:47 【问题描述】:在C编程中声明int[]
是什么意思?就像在这段代码中
int findPivot(int[], int, int);
【问题讨论】:
在给定的代码中,它是一个int*
,一个指向int
的指针。
这是一个int
的数组。 The Definitive C Book Guide and List
int[]
- int 数组,例如指向整数数组的指针。
【参考方案1】:
int findPivot(int[], int, int);
是一个函数声明。有时,它也被称为Forward declaration 或Function prototype。
FWIW,在函数声明中,你可以省略变量名,只指定变量类型就足够了。
在此特定上下文中,int[]
和int*
具有相同的含义,即int[]
是指函数接受指向int
的指针作为第一个参数.
在调用函数时,我们可以通过
指向int
或 的指针
一个int
数组(由于array decaying 在传递参数时的影响,数组类型参数归结为一个指针)。
你可以调用函数为
#define MAX 128
int actualArray[MAX] = 0;
int p = <somevalue>;
int q = <someothervalue>;
//somecode
int retval = findPivot(actualArray, p, q);
【讨论】:
说它接受int
数组作为第一个参数是正确的,但具有误导性。它接受任何指向int
的指针。
也许只是说第一个参数确实是int*
,但是因为数组衰减它可以接受数组参数?
好的,数组 decay 允许您将数组名称作为 argument 传递给带有指针 parameter 的函数.所以 int[]
不是 int*
因为衰变。之所以如此,是因为类型被 调整 为指针。这有意义吗?
这样更好!而且没有必要做那种“先生”的生意;-)
@juanchopanza 谢谢。至于“先生”,则是MMM。【参考方案2】:
鉴于您询问的是int[]
类型的函数参数,在这种特殊情况下,它等效于指向int
的指针,即int*
。两者没有区别。在其他情况下,int[]
可能有不同的含义。
这两个函数声明是一样的:
void foo(int[]);
void foo(int*);
两者都等价于:
void foo(int[42]);
如果你要定义多个,你会得到一个多重定义错误
void foo(int[])
void foo(int*) // ERROR! Multiple definition.
现在,由于 C 允许数组衰减为指针,您实际上可以使用 int
数组作为 参数 调用 foo
。数组衰减为指向其第一个元素的指针。
int a[42];
int b[99];
int c;
foo(a);
foo(b);
foo(&c);
由于衰减指向一个指针,所有数组大小信息都丢失了。
【讨论】:
【参考方案3】:在您指定的情况下,它指定带有参数存根int[]
的函数的第一个位置可用于任何数组参数
如果它在这样的分配中
int values[] = 9, 2, 6, 1, 4;
这意味着将使用与初始化该数组时添加的数组项一样多的数组项来创建值,在本例中为 5。
【讨论】:
【参考方案4】:在这个函数声明中
int findPivot(int[], int, int);
int[] - 将函数参数声明为具有未知数量元素的整数数组类型。所以它是一个不完整的类型。
编译器将此声明调整为指针。所以这两个函数声明是等价的
int findPivot(int[], int, int);
int findPivot(int *, int, int);
当您将数组作为参数的对应参数传递时,它会隐式转换为指向其第一个元素的指针。所以数组中元素的数量并不重要。因此,上述两个声明可以附加一个函数声明,其中指定数组中的元素数量。例如
int findPivot(int[10], int, int);
int findPivot(int[20], int, int);
int findPivot(int[], int, int);
int findPivot(int *, int, int);
这些声明声明了同一个函数。
【讨论】:
【参考方案5】:findPivot 需要一个 int array 和两个 int
变量。 int
数组实际上是一组整数值。在这种情况下,它相当于int pointer。
【讨论】:
你能告诉我为什么你认为这个答案没有帮助吗?以上是关于int **m,**s;是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
汇编语言中 LEA DX,S MOV AH,9 INT 21H具体意思是啥,请大师指教。
汇编语言中 LEA DX,S MOV AH,9 INT 21H具体意思是啥,请大师指教。