
#include <stdioh>
int main(){
int arr[] = { 99, 15, 100, 888, 252 };
int i, p = arr, len = sizeof(arr) / sizeof(int);
for(i=0; i<len; i++){
printf("%d ", (p+i) );}
printf("\n");
return 0;
}
数组在内存中只是数组元素的简单排列,没有开始和结束标志,在求数组的长度时不能使用sizeof(p) / sizeof(int),因为 p 只是一个指向 int 类型的指针,编译器并不知道它指向的到底是一个整数还是一系列整数(数组)。
所以 sizeof(p) 求得的是 p 这个指针变量本身所占用的字节数,而不是整个数组占用的字节数。也就是说,根据数组指针不能逆推出整个数组元素的个数,以及数组从哪里开始、到哪里结束等信息。
首先可以肯定的是无论几维的数组在内存中存储时都是连续的,但是数组每个元素在内存中的排列方式具体是按照什么的规则来排呢?这主要取决与编译器,一般有按行排,也有按列排,也有其他的一些排法。所以如果你想用指针表示一个数组中某一个元素的地址,关键还是要了解数组在内存中的具体排列方式。
程序功能:主函数声明一个整形二维数组并初始化,子函数display用于显示数组中的元素,display的参数是整形指针。
#include <stdioh>
void display(int p); //显示指针p所指向的内容
int main()
{
int i = 0;
int arr[5][5] = { 10,11,12,13,14,
20,21,22,23,24,
31,32,33,34,35,
41,42,43,44,45,
51,52,53,54,55 };
display(arr[0]); //调用显示函数
return 0;
}
/函数描述:显示数组arr中的元素(按矩阵的形式)/
/参数: p:指向待显示内容的首地址/
/返回值: 空/
void display(int p)
{
int i = 0;
for(i = 0;i < 25;i++)
{
printf("%d ",(p+i));
if((4 == i) || (9 == i) || (14 == i) || (19 == i) || (24 == i))
{
printf("\n");
}
}
}
两者都是指针,但指向的数据类型完全不同。
p1指向的是整数,这好理解。
p2指向的是长度为10的数组。
p1 = a是完全没有问题的。
p2 = a其实是做了自动类型转换的,通常会有警告(在某些编译器上甚至通不过)。
虽然p1 = a,p2 = a后,p1是一个整数,p2是一个数组的地址(在这里是a);
p1 ++ 将使p1指向a[0]后面的一个整数。
而p2 ++ 将是p2指向a后面的一个数组。
像p2这样指向数组的指针通常用于2维数组。
比如b[3][10];
那么p2 = b后,p, (p+1), (p+2)分别是b[0], b[1], b[2]。
利用p++可以遍历这些长度为10的数组。
单维数组名就是首地址,多维数组名就是第1维的首地址,因此取首地址,可以把数组名赋给对应的指针变量,或取索引为0的首个元素地址赋给对应的指针变量。举例:
单维
int
arr[10];
int
p
=arr;
或
int
p
=&arr[0];
二维
int
arr[10][10];
int
(p)[10]
=arr;
或int
(p)[10]
=
&arr[0];//
取第一维地址
int
arr[10][10];
int
p=
&
arr[0][0];
//
取多维中的首个元素
不是不可以
一个int型的指针想要存数据
必须指向一块内存
然后
通过不断向内存写数据
同时将数据赋值给数组各元素
要么定义一个变量
将指针指向他
要么动态分配一块内存
如果指向一个变量的话
何必用指针
直接用变量就好了
动态分配的话
有点太兴师动众了
int
p=new
int
for(int
i=0;i<5;i++)
{
cin>>p;
a[i]=p;
}
这又何苦呢
int
a[5],p=a;
cin>>p[i];
还是说你想要这样
指针只是表示内存的地址
真正起作用的是内存
如果你的指针是空的
是存不进变量的
#include
using
namespace
std;
int
main()
{
int
a[5],p=a,i;
for(i=0;i<5;i++)
cin>>p[i];//cin>>(p+i);
for(i=0;i<5;i++)
cout<
评论
0
0
加载更多
指针数组,就是一个数组里存放的都是指针,比如p[8];p[0]里存放的就是一个指针数据
数组指针,数组名就是一个指向数组起始地址的指针,数组下标是萦引,比如num[0],他就相当于num+0;
num这个指针没移动,于是取的是数组的第一个。num[1]相当于数组指针移1,于是指向数组第二个
以上就是关于C语言用指针解遍历数组全部的内容,包括:C语言用指针解遍历数组、C语言中如何用指针来取得多维数组地址的写法、用指针自定义整型数组,数组元素从外部获取;遍历输出数组元素的值计算数组所有等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)