黑马程序员——一维数组指针探究

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

用字符串座位研究对象:

定义两个字符串指针:

char *str = "abcdefg";

char *str1[] = {"adv","fegb","dfew"};

str其实相当于一维数组,str1相当于是一维数组。

分析一维字符为数组

int main(){
    char *str = "abcdefg";
    printf("str的地址是:    %p\n",str);
    printf("&str[0]的地址时:%p\n",&str[0]);
    printf("&*str的地址是:  %p\n",&*str);
    printf("&str的地址时:   %p\n",&str);
}
结果如下:

str的地址是:    0x100000f22

&str[0]的地址时:0x100000f22

&*str的地址是:  0x100000f22

&str的地址时:   0x7fff5fbff858

分析得出:

str是数组首元素的地址,也就是a的地址,因此同&str[0]的地址是一样的,都是指向数组中首元素字母a的存储地址。

&*str是相当于也是&a的地址,只不过是进行了更多一步的计算。

&str不同与其它三个是因为,&str其实是取了指针变量str的地址,因此不同。

输出方式:

int main(){
    char *str = "abcdefg";
    printf("用*str的输出首字母: %c\n",*str);
    printf("用*str的输出首字母: %c\n",str[0]);
    printf("用*str的输出第二个字母: %c\n",*(str+1));
    printf("用*str的输出第二个字母: %c\n",str[1]);
}
显示结果如下:

*str的输出首字母: a

*str的输出首字母: a

*str的输出第二个字母: b

*str的输出第二个字母: b

分析:

因为str所指向的是地址,所以+1对于char类型来说,是向下移了一个字节,所以才能输出第二个字母。

注意:如果没有括号,是*str+1的话,那么就会再*str的结果上加上数字1.





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值