深入解析int(*p)[]和int(**p)[]

以下是对int(*p)[]和int(**p)[]的使用进行了详细的分析介绍,需要的朋友可以参考下
 

1. int(*p)[10]:
根据运算符的结合律,()的优先级最高,所以p是一个指针,指向的一个维度为10的一维数组。
p一个指向数组的某一行

复制代码 代码如下:

int a[1][4]={1,2,3,4};
    int (*p)[4] = a;//p point to the row of array a
    for(int i=0;i<4;i++)
    {
     cout<<*((*p)+i)<<" ";
    }

2. int(**q)[10]
这个的意义:q是一个指针,指向的元素就是1.中的p.
下面给一个例子:

复制代码 代码如下:

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    int a[2][2]={1,2,3,4};
    int (*p)[2] = a;//p point to the row of array a
    for(int i = 0;i<2;i++)//output matrix using p
    {
            for(int j = 0;j<2;j++)
            {
                    cout<<*(*(p+i)+j)<<" ";
            }
            cout<<endl;
    }
    int (**q)[2] = &p;//q point to p
    for(int i = 0;i<2;i++)//output matrix using q
    {
            for(int j = 0;j<2;j++)
            {
                    cout<<*(*(*q+i)+j)<<" ";
            }
            cout<<endl;
    }

    getchar();
    return 0;
}

时间: 2024-07-30 17:36:14

深入解析int(*p)[]和int(**p)[]的相关文章

浅析int*p[ ]与int(*p)[ ]的区别

以下是对int*p[ ]与int(*p)[ ]的区别进行了详细的分析介绍,需要的朋友可以参考下   举例说明:1)int* p[2] 是一个指向int型的指针数组,即:p是包含两个元素的指针数组,指针指向的是int型.可以这样来用: 复制代码 代码如下: <SPAN style="BACKGROUND-COLOR: rgb(255,255,255)">#include <iostream> using namespace std; int main(int ar

mysql中int(1)和int(11)区别详解

mysql字段定义中INT(x)中的x仅仅指的是显示宽度.该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度.显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示.所以x的定义与存储空间没有任何关系都是4个字节. 作为SQL标准的扩展,MySQL也支持整数类型TINYINT.MEDIUMINT和BIGINT.下面的表显示了需要的每个整数类型的存储和范围. 类型 字节 最小值 最大值     (带符号的/无符号的) (带符号的/无符号的) TINYINT 1

java-为什么new int[4]== new int[4]的boolean值为flase

问题描述 为什么new int[4]== new int[4]的boolean值为flase 如题为什么new int[4]== new int[4]的boolean值为flase............................................................... 解决方案 这个比较的是两次new int[4]的地址,比较的是地址啊... 当然会不一样了 解决方案二: int [][]a=new int[4][4] 解决方案三: 因为是不同地址呀,new

如何理解int *(*a[5])(int, char*);

int *(*a[5])(int, char*);  拆开来分析:typedef int* (*f)(int,char*);f a[5]; 所以a是个5个元素的数组,每个元素为函数指针. 可用代码验证: #include <stdio.h> #include <stdlib.h> int* (*a[5])(int,char*); int *foo(int n, char *s) { int *p; p = (int *)malloc(sizeof(int)); *p = n + a

c++-c#中数组可以直接部分赋值吗??int[] a=new int[5]={1,2}这样写报错

问题描述 c#中数组可以直接部分赋值吗??int[] a=new int[5]={1,2}这样写报错 c#中数组可以直接部分赋值吗??int[] a=new int[5]={1,2}这样写报错,有什么方法可以实现,这样不行,有什么方法可以实现,c++中可以,C#却不行,头有点大,c++很多余C#不同 解决方案 int[] a = new int[] { 1, 2 }.Concat(Enumerable.Repeat(0, 3)).ToArray(); 解决方案二: 作为特例,字符串可以 char

mfc-关于int CDemo1Dlg::connectSPort(int portNum) 函数

问题描述 关于int CDemo1Dlg::connectSPort(int portNum) 函数 int CDemo1Dlg::connectSPort(int portNum) { CommDriver.put_CommPort(portNum); CommDriver.put_InputMode(1); CommDriver.put_InBufferSize(1024); CommDriver.put_OutBufferSize(512); CommDriver.put_Settings

int *p,cons int *p,int const *p,int * const p,const int * const p,int const * const p的区别

 加有const关键字的几种情况的辨析 const修饰的代码 含义(特点) 等价性 int *p = &num; 1.       可以读自己 2.       可以通过*p改自己 3.       可以通过p = &data来看别人 权限最大 cons int *p = &num; 1.const放在左边意味着指向的是常量,这个常量不可以修改, 2.p = &data; (地址可以修改) 3.*p = 30;(这个时候是错误的) 这两者等价(应用:查看别人的账户) i

c++-const int a=10; int *p =(int *)(&amp;amp;amp;a);

问题描述 const int a=10; int *p =(int *)(&a); #include using namespace std ; int main () { const int a=10; int *p =(int *)(&a);//运行正常 为什么 int *p = &a 报错 cannot convert from 'const int *' to 'int *' 解决方案 因为是const int *,传给int *必须类型转换.之所以有这样的规定是为了防止程

浅析int*p[ ]与int(*p)[ ]的区别_C 语言

举例说明:1)int* p[2] 是一个指向int型的指针数组,即:p是包含两个元素的指针数组,指针指向的是int型.可以这样来用: 复制代码 代码如下: <SPAN style="BACKGROUND-COLOR: rgb(255,255,255)">#include <iostream>using namespace std;int main(int argc, char* argv[]) {int* p[2];int a[3] = {1, 2, 3};in