深入解析指针数组和数组指针

优先级:

方括号 “ [ ] ” 的优先级是高于指针运算符  “ * ” 的,而我们知道()这个括号是优先级中的大老大。。

指针数组:

int *p1[10]; //指针数组

1.一维数组,数组元素有10个
2.数组的每个元素都是一个指向int型对象的指针。
所以,p1[i]是一个int指针,而*p1[i]是指针指向的第i个文本行的首字符。
当然你还是要给指针赋地址。比如:
int a[10]={0};
for(i=0;i<10;i++)
{
     p1[i]=&a[i];//给指针赋地址、、、
}

int (*p2)[10] //数组指针
1. p2是这个数组的首地址,可以用两种方法
(1)int a[10]={0};
    p2=&a;

        (2)p2 = (int *)malloc(sizeof(int)* 10);

给数组指针地址。
2. (*p2)[i]可以用来表示每一个数组元素的值。



tips:
#include <stdio.h>
#include <stdlib.h>
int *p1[10] = { 0 };//指针数组,
int(*p2)[10];//数组指针
int main()
{
   int *p;
   p2 = (int *)malloc(sizeof(int)* 10);                             
   //(*p2)[1] = 0;

   printf("&p2[1]的地址=%d\n", &p2[1] );
   printf("&p2[0]=%d\np2=%d\n", &p2[0],p2);

   p2[1][1] = 0;
   printf("p2[1][1]=%d\n",p2[1][1]);
   printf("hello");
   return 0;
}
我在VS下运行的,好奇地发现,
从下图可以看出地址差40,这40就是10个int所占的字节数。





加油。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值