指针总结(—)

1:指针常量
    *100=25  (假设100是a的地址,如果你想把a的值改成25,使用*100=25是否可以?)  
      答案:这样做是错误的,字面值100的类型是整形,而解引用操纵只能对指针类型进行操作,所有应该成   *(int *100)=25;
2:指针变量p
a:指针变量p里面存储的任何数据都被当作地址处理。
b:指针变量的大小和*前面的数据类型无关。
c:*前面的数据类型只能说明指针指向变量的数据类型。
d:声明不需要分配空间,而定义需要,所以:
   int a[100];和int a[];作为声明没有什么区别
f:定义为指针,声明为数组:
add.c
<pre name="code" class="html"><span style="color:#330000;">char *a="abcdef";</span>


 
 test.c   
 
#include <stdio.h>

extern char a[];
extern print();

int main()
{
                print();
                printf( "%p\n", a);
                printf( "%s\n", a);
                printf( "%s\n", *(char **)a);
                printf( "%s\n", (char *)*(int *)a);
                return 0;
}
  3:数组指针和指针数组
  int *p1[10]    //数组指针

数组指针:*p1[10];
根据运算符优先级的关系,下标运算符的优先级高于*运算符,所以数组名p1先和【10】结合,表示数组的大小为10个元素的大小,随后p1[10]在于int *结合,表示数组中元素的类型为指向整形的指针类型。

int   (*p2)[10];  // 指向数组的指针
指针数组:int  (*p2)[10];
理解:表示的是一个能指向10个整型元素的数组的指针,注意是指针,而不是数组
那怎样对指针数组进行引用呢:
  int   arr[10];
  int   (*parr)[10]=&arr;
下来我们来看这样两行代码:
                 int *arr[10];    //    数组指针
                 int(*parr)[10]=arr;    //指向数组的指针

我们想通过数组指针对指向数组的指针进行引用,于是传递给指针数组一个数组名arr,但编译器发出以下警告:
 
warning C4047: “初始化”:“int (*)[10]”与“int **”的间接级别不同
     
原因是:arr是指针数组arr[10]的首地址,而arr[10]中元素的类型都是int *类型,所以arr的类型就为int **,所以编译器发出了警告。
如要正确引用:需把整个数组的地址传递给指针数组,而不是首地址,并且要把指针数组的类型强制转化为(int *)类型,因为数组指针arr中,元素的类型为int *型。


总结:初学小白,如有描述不当之处欢迎指出!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值