DC-8:指针(2)

上代码:

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>

int main()
{
    char *ch1 = "you want to meet me";
	char *ch2 = "i love you";
	char *ch3 = "wake up";
	char *a[3] = { ch1, ch2, ch3};

        printf ("a[0]           %4s\n", a[0]);
        printf ("a[0]           %4p\n", a[0]);
        printf ("ch1 + 4        %4p\n", ch1 + 4);
	printf ("a[0] + 4       %4p\n", a[0] + 4 );
        printf ("&a[0]          %4p\n", &a[0]);
	printf ("*(a[0] + 4)    %4c\n", *(a[0] + 4) );
	printf ("-------------------------\n");

	printf ("               %s\n", a[1]);
	printf ("               %p\n", a[1]);
	printf ("--------------------------\n");

	printf ("               %s\n", a[2]);
	printf ("               %p\n", a[2]);
	printf ("--------------------------\n");
	
	printf ("&a=            %4p\n", &a);
	printf ("a=             %4p\n", a);
	printf ("a+1=           %4p\n", a+1);
	printf ("*(a+1)=        %4p\n", *(a+1));
    printf("---------------------------\n");
	 
	char **p = a;
	printf ("p              %4p\n", p);
    printf ("*(*(a+0) + 4)    %c\n",  *(*(a + 0) + 4) );
	printf ("\n");
    return 0;
}
上结果:


       先看前三段,每段开头先输出原字符串,利用指针数组,输出数组每个指针指向的ch的字符串。

以第一段为例,

       对于,字符串的地址,利用a[0]输出,这便是第一个字符y的地址,数组名字符串名代表首个元素的地址。

       对于ch+4,ch指向字符串y,+4便是对第5个进行操作,输出地址。同样,a[0]存的是指向这个字符串的指针,对于a[0]的操作便是对指针的操作,也可以得到输出地址。

       在一级指针中a,&a[0],&a这三个操作会得到一样的值。都表示指针数组的首地址,但要是对于下一个指针进行操作,&a不行,在同样数据类型的时候,他会出现在数组的下一位,出现越界。在一个指向int类型的指针数组中&arr+1会直接跳过20个字节。同样,32位下,指针大小为4,所以在数组加1后会跳过16个字节。

     *(a[0] + 4)是取第1个字符串的第5个元素,在第5段中,二级指针用法相类似。

     第五段中,p是一个指向指针数组的指针,所以p的内容便是a的首地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值