int *p[4]与int (*q)[4]的区别
以上定义涉及两个运算符:“*”(间接引用)、“[]”(下标),“[]”的优先级别大于“*”的优先级别。
首先看int *p[4],“[]”的优先级别高,所以它首先是个大小为4的数组,即p[4];剩下的“int *”作为补充说明,即说明该数组的每一个元素为指向一个整型类型的指针。int *p[4]的存储结构如下:(存储方格横向排列或竖向排列没区别,只要按内存地址顺序排列就行,此处只是为画图方便)
再看int (*q)[4]。它首先是个指针,即*q,剩下的“int [4]”作为补充说明,即说明指针q指向一个长度为4的数组。int (*q)[4]的存储结构如下:
请看以下定义:
int a[2][4]={{2,5,6,8},{22,55,66,88}};
int c[4]={5,8,9,4};
int d[3]={23,12,443};
int *p[4],(*q)[4];
q=a;
*p=c;
*(p+1)=d;
则int *p[4]和int (*q)[4]的存储数据为:
验证:
|
#include <stdio.h> int main(void) { int a[2][4]={{2,5,6,8},{22,55,66,88}}; int c[4]={5,8,9,4}; int d[3]={23,12,443}; int *p[4],(*q)[4]; q=a; *p=c; *(p+1)=d; int i,j; for(i=0;i<2;i++) for(j=0;j<4;j++) { if((i==1)&&(j==3)) break; printf("*(*(p+%d)+%d)=%d\n",i,j,*(*(p+i)+j)); } puts("==============="); for(i=0;i<2;i++) for(j=0;j<4;j++) printf("*(*(q+%d)+%d)=%d\n",i,j,*(*(q+i)+j)); return 0; } 输出结果为: *(*(p+0)+0)=5 *(*(p+0)+1)=8 *(*(p+0)+2)=9 *(*(p+0)+3)=4 *(*(p+1)+0)=23 *(*(p+1)+1)=12 *(*(p+1)+2)=443 =============== *(*(q+0)+0)=2 *(*(q+0)+1)=5 *(*(q+0)+2)=6 *(*(q+0)+3)=8 *(*(q+1)+0)=22 *(*(q+1)+1)=55 *(*(q+1)+2)=66 *(*(q+1)+3)=88 |
int *p[4]与int (*q)[4]的区别的更多相关文章
- C++中int *p[4]和 int (*q)[4]的区别
这俩兄弟长得实在太像,以至于经常让人混淆.然而细心领会和甄别就会发现它们大有不同. 前者是指针数组,后者是指向数组的指针.更详细地说. 前: 指针数组;是一个元素全为指针的数组.后: 数组指针;可以直 ...
- 关于int *a[常量]与int (*a)[常量]的分析与区分(详解)
前言: 小伙伴私信我说,int *a[常量]与int (*a)[常量]这个区分不开,C指针,确实是C中最难的部分,也是学C++,JAVA,包括你以后上岗用的非常频繁的东西,在这里我就简单论述一下吧,具 ...
- int *const 与const int *问题
自己一直就不太清楚int *const与const int*之间的差别,总是弄混,今天势必拿一个程序验证一下. 一个指针是有两个属性的,一个是它指向的地方,一个是它指向地方上的内容.两者的差别也在此. ...
- C语言复杂声明-void (*signal(int sig, void (*handler)(int)))(int);
问题提出 请分析此声明:void (*signal(int sig, void (*handler)(int)))(int); 求解过程 在对上面的例子作分析之前,我们需要了解C语言的声明优先级,&l ...
- 编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Stud
package zuoye; public class student { int age; String name; int stuNO; void outPut() { System.out.pr ...
- const int * p 和 int const * p 和 int * const p 的区别
首先注意,const int * p 和int const *p 是一样的,并且不管是不是*p,即使const int i和int const i也是一样的,所以我们接下来只讨论int const * ...
- (int),Int32.Parse() 和 Convert.toInt32() 的区别
在 C# 中,(int),Int32.Parse() 和 Convert.toInt32() 三种方法有何区别? int 关键字表示一种整型,是32位的,它的 .NET Framework 类型为 S ...
- (int &)a 和(int)a
[cpp] view plain copy float a = 1.0f; cout < < (int)a < < endl; cout < < ...
- int * const 与 const int * 的区别
type * const 与 const type * 是在C/C++编程中特别容易混淆的两个知识点,现在就以 int * const 和 const int * 为例来简略介绍一下这两者之间的区别. ...
随机推荐
- applicationContext.xml 配置(扫描)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 入门级(python)
1.素数,求1-100之间的素数(想在代码中写中文注释,加一句#coding=utf-8,注意等号左右没空格) def isPrime(n): if(n == 1): return False els ...
- java类的初始化
转载:http://blog.csdn.net/moreevan/article/details/6968718 我们知道一个类(class)要被使用必须经过装载,连接,初始化这样的过程.下面先对这三 ...
- HIT Winter Day ACM入门
A. Arpa’s hard exam and Mehrdad’s naive cheat 题意:统计1378^n的末尾数字 即统计8^n的末尾数字 n=0时为1 其他情况为{8,4,2,6}中的一个 ...
- VC++中使用ADO方式操作ACCESS数据库
ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB,COM不了解也能轻松对付ADO,因为 ...
- 多选出差同事id,拼接,去掉最后逗号
===========方法1 substr() ,永远都是.(第一个参数)开始位置.(第二个参数)截取个数 ,负数表示都后面开始数 substr($data['members'],0,strlen($ ...
- strlcpy() 函数
size_t strlcpy(char *dst, const char *src, size_t siz) { char *d = dst; const char *s = src; size_t ...
- LeetCode OJ 160. Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- sublime 2
just baidu sublime license and find a free one!
- shell脚本一键同步集群时间
shell脚本一键同步集群时间 弋嘤捕大 椿澄辄 ψ壤 茇徜燕 ㄢ交涔沔 阚龇棚绍 テ趼蜱棣 灵打了个寒颤也没有去甩脱愣是拖着 喇吉辔 秋北酏崖 琮淄脸酷 茇呶剑 莲夤罱 陕遇骸淫 ...