指针和数组

1,指针就是指针,指针变量在32位系统下,占4个字节,其值为某 个内存的地址。可以指向任何地   方。

2,数组就是数组,其大小与元素的类型和个数有关;定义数组时,必须指定元素的类型个元素的个数;    数组可以存放任何数据类型,但 不可以存放函数。
 
3,它们之间没有任何的关系,只是穿着相似的衣服来逗你玩罢了。
 
4,以指针的形式访问指针和以下标的形式访问指针
    char* p = "abcdef";

       a,定义一个指针变量p,p本身在栈上占4个字节,p里存储的是一块内存的首地址。这块内存在静             态区,大小为7个字节。


       b,这块内存没有名字,对这块内存的访问完全是匿名访问。

       c,可以通过*(p+4)指针的形式,取出p里存储的地址值,再加上4个字符的偏移量,最后取出该地址           值对应的值。

       d,也可以通过p[4]下标的形式,但编译器最终会解析成c中的形式,本质上是相同的,只是写法不             同罢了。
 
5,以指针的形式访问数组和以下标的形式访问数组 
    char a[] = "123456";
       a,定义了一个数组a,a拥有7个char类型的元素,其空间大小为7.数组a本身在栈上面。
       b,对a的元素的访问必须先根据数组的名字a找到数组首元素的首地址,然后根据偏移量找到相应            的值。即:‘具名+匿名’访问
       c,如果要访问5,以指针的形式:*(a+4),a这时候代表的是数组首元素的首地址,访问的方式同4             中的 c。
       d,要是以下标的形式,a[4],道理同4中的d。
 
6,由4,5可以得出,指针和数组根本就是两个完全不一样的东西,它们都可以“以指针的形式”或“以下标    的形式”进行访问。 一个是完全匿名,一个是具名+匿名。
 
7,数组a[4],这里的a和&a两者有什么区别?  看下面的例子。
   main()
   {
      int a[5] = {1,2,3,4,5};
      int* p = (int*)(&a+1);
      printf("%d,%d",*(a+1),*(p-1));

   }
       a,(&a+1),表示下一个数组的首地址,显然当前指针已经越过了数组的界限
       b,(int*)(&a+1),把上一步得出来的地址进行强制转化,转化为(int*)型的,并将其赋给p
       c,*(a+1):a和&a的值是一样的,但意思不一样,a是数组首元素的首地址,&a是数组的首地址,               a+1是 下一个元素的首地址, 即a[1]的首地址,&a+1是下一个数组的首地址。
       d,*(p-1)因为p是指向a[5],并具p是int*型的,所以*(p-1)是指向a[4],输出5.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值