指针数组

        一个一维指针数组的定义:int *ptr_arry[10]

       指针数组中的每一个元素均为指针,即有诸形如 “ *ptr_arry[i] ” 的指针。

       由于数组名本身也是一个指针,因此指针数组中的元素亦可以表示为 “ *( *(ptr_arry+ i) ) ” 。又因为 “ () ” 的优先级较 “ * ” 高,且 “ * ” 是右结合的,因此可以写作 **(ptr_arry+ i)。

       由于数组元素均为指针,因此ptr_arry[i] 是指第 i 个元素的指针。

       指针数组常适用于指向若干字符串,这样使字符串处理更加灵活方便

#include<stdio.h>
#include<string.h>

int main()
{
    char *str[] = {"welcome", "to", "techshine", "beijing"};
						// 定义四个字符串指针,分别如上 str[0] str[1] str[2] str[3]
    printf("str[0] = %s\n", str[0]);		//welcome
    printf("str[1] = %s\n", str[1]);		//to
    printf("str[2] = %s\n", str[2]);		//techshine
    printf("str[3] = %s\n", str[3]);		//beijing

    printf("str+1 = %s\n", *(str+1));		//to
    printf("str+2 = %s\n", *(str+2)+6);		//ine

    char **p = str+1;				// 指针的指针,指向 &str[1] 等价 str+1
    str[0] = (*p++);				// str[0] 指向了原来 str[1] 的地址 to 
    str[1] = *(p+1);				// p指向了&str[2],str[1] 指向了原来 str[3] 的地址 beijing
    str[2] = p[1]+3;				// 因为现在p指向&str[2], 所以p[1],实际指向str[3],再偏移3个字符,所以指向 "jing"
    str[3] = p[1]+(str[2]-str[1]);		// 如上str[2]-str[1]相差三个偏移,所以str[3]=p[1]+3,所以同上一句
    
    printf("str[0] = %s\n", str[0]);		// to
    printf("str[1] = %s\n", str[1]);		// beijing
    printf("str[2] = %s\n", str[2]);		// jing
    printf("str[3] = %s\n", str[3]);		// jing

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值