C 再识数组指针 指针数组的概念
参考出处:
http://www.cnblogs.com/mq0036/p/3382732.html
http://www.cnblogs.com/hongcha717/archive/2010/10/24/1859780.html
出处中判断哪个是数组指针和指针数组?
A int*p1[10] B int(*p2)[10]
首先看看他们的类型,在 VS C++中使用sizeof运算符。
printf("%d\n",sizeof(p1)); //结果 40 可以看出是一个数组,每一个元素是一个指针,共有10个指针,所以是指针数组,重点在数组上
printf("%d\n",sizeof(p2)); // 结果 4 可以看出是一个指针,指向的是一个数组。
出处中提出了怎样判断的观点:通过优先符判断,对于 int*p[10] []优先符高,说明是一个数组,每个元素是 int* 类型的指针;对于Int(*p)[10] 优先符()最高,说明是一个指针,指向的是一个整型的一维数组。
然后我们看看如何使用它们获得2维数组的元素值:
int a[2][10] = {{1,1,1,1,1,1,1,1,1,1},{2,2,2,2,2,2,2,2,2,2}};
p1 = a?
p2 = a?
大家都知道 a是一个指向指针的指针常量,a代表整个二维数组的首地址的地址常量,a等价于&a[0] ,是第一个元素的地址,所以指针p2赋值&a[0]是正确的。因为类型相当: 前一种写法不对,后一种对。
那么p1如何赋值呢? 因为p1是指针数组,正确写法是 p1 = a[0] p1=a[1] ...
完整代码如下:
printf("------");
int *p1[10];
printf("%d\n",sizeof(p1));
int (*p2)[10];
printf("%d\n",sizeof(p2));
int a[2][10] = {{1,1,1,1,1,1,1,1,1,1},{2,2,2,2,2,2,2,2,2,2}};
printf("---指针数组的使用---\n");
for (int i=0;i<2;i++)
{
p1[i] = a[i];
for (int j=0;j<10;j++)
{
printf("%d ",p1[i][j]);
}
printf("指针数组每一行的首地址:p1[i] = %d a[i] = %d",p1[i],&a[i]);//1 1 1 1 1 1 1 1 1 1 指针数组每一行的首地址:p1[i] = 13041008 a[i] = 13041008 2 2 2 2 2 2 2 2 2 2 指针数组每一行的首地址:p1[i] = 13041048 a[i] = 13041048
printf("\n");
}
printf("---数组指针的使用---\n");
p2 = a; //写法最简单
for (int i = 0;i<2;i++)
{
for (int j=0;j<10;j++)
{
printf("%d ",p2[0][j]);
}
printf("指针数组每一行的首地址:p2[i] = %d a[i] = %d",p2,&a[i]); //结果和上面对应的一样,这也是这两者的区别
p2++; //如果这地方写 p2++说明是指向下一行的指针 那么访问的时候直接使用 p2[0][j] 向该行逐个移动指针
printf("\n");
}
printf("%d ",a);
printf("%d ",&a);
printf("%d ",&a[0]); 他们三个值是一样的,说明是数组首元素的地址
附int**的使用
int **p = new int *;
int ar1[10]={1,2,3,4,5,6,7,8,910};
p[0] = ar1;//p[0]代表的是int*类型
int ar2[3]={1,2,3};
p[1] = ar2;
int * pm = p[1];
printf("%d",pm[2]);
std::cout<<pm[2];
C 再识数组指针 指针数组的概念的更多相关文章
- C语言-再论指针与数组
指针与数组的天生姻缘1.以指针方式来访问数组元素(1).数组元素使用时不能整体访问,只能是单个访问.访问形式有两种:数组形式和指针形式.(2).数组形式访问数组元素:数组名[下标]:(下标从0开始(3 ...
- c/c++ 函数、常量、指针和数组的关系梳理
压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习……无限循环中,好记性不如烂笔头……从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和 ...
- 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...
- 11-C语言指针&一维数组&字符串
一.用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = ...
- C语言核心之数组和指针详解
指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...
- 《征服 C 指针》摘录3:数组 与 指针
一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的 ...
- 《C专家编程》第四章——令人震惊的事实:数组和指针并不相同
数组和指针是C语言里相当重要的两部分内容,也是新手程序员最容易搞混的两个地方,本章我们锁定指针与数组,探讨它们的异同点. 首先来看指针与数组在声明上的区别: int a[10]; int *p; 很明 ...
- 【C语言学习】《C Primer Plus》第10章 数组和指针
学习总结 1.数组初始化方式: int a[]={1,2,3} int a[SIZE]={1,2,3} //SIZE是宏定义,数组初始化个数不能大于SIZE,否则报错:当个数小 //SIZE,自动补0 ...
- C++数组和指针
<C++ Primer 4th>读书摘要 与 vector 类型相似,数组也可以保存某种类型的一组对象:而它们的区别在于,数组的长度是固定的.数组一经创建,就不允许添加新的元素.指针则可以 ...
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
随机推荐
- C链表操作
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <std ...
- C++编程对缓冲区的理解
本文转自:http://www.vckbase.com/index.php/wv/1592 什么是缓冲区 缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空 ...
- Mysql中自增字段(AUTO_INCREMENT)的一些常识
Mysql中自增字段(AUTO_INCREMENT)的一些常识: http://chengxuyuan.naxieshir.com/fenlei/2/p/151.html
- Helpers\GeoCode
Helpers\GeoCode This function connects to google maps and retrieves the lat/lon of the address provi ...
- How to solve Original Tango programmer”Hardware not Found”?
Original Tango programmer is a new generation of transponder programmer which is developed to cover, ...
- CAML query for Group by count and data
CAML query for Group by count and data Company Category Product Name Microsoft Developer Visual Stud ...
- Objective-C ,ios,iphone开发基础:多个视图(view)之间的切换,以及视图之间传值。
所有的视图都继承自 UIViewController,都使用 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nib ...
- [转]Speeding Up Websites With YSlow
本文转自:http://net.tutsplus.com/tutorials/other/speeding-up-websites-with-yslow/ We all know there are ...
- [设计模式]<<设计模式之禅>>关于里氏替换原则
在面向对象的语言中,继承是必不可少的.非常优秀的语言机制,它有如下优点:● 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性:● 提高代码的重用性:● 子类可以形似父类,但又异于父类,“龙 ...
- const 指针与指向const的指针
最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...