鱼C论坛

 找回密码
 立即注册
查看: 3081|回复: 6

数组下标和指针方式的区别?

[复制链接]
发表于 2021-2-11 19:45:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
str是一个数组,作为参数传入到函数中,下面代码是函数中处理数组长度的2个方法,用指针方式循环后,要把指针指到头部这个我理解,那么为啥数组下标方式不需要呢,数组下标循环本质上跟指针循环的区别是什么?

函数定义:void delchar( char *str, char c )
假设str[] = "abcd"

数组下标处理
        int i = 0;
        while(str[i]!='\0')
        {
                i++;
        }
        printf("str now is %c\n",*str);//打印出a

指针处理
        int i = 0;
        while(*str!='\0')
        {
                i++;
                str++;
        }
        str-=i;
        printf("str now is %c\n",*str);//打印出a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-11 19:53:06 | 显示全部楼层
数组下标本质上就是指针的一个语法糖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-11 21:20:44 From FishC Mobile | 显示全部楼层
指针下标, 指针本身没变。
指针自加, 指针本身变了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-11 22:01:30 | 显示全部楼层
本帖最后由 一叶枫残 于 2021-2-11 22:02 编辑

你这个是字符串吧,字符串下标表示的就是字符串的首地址,在下标处理的时候并没有改变它的地址值,所以不需要
#include<stdio.h>
void delchar( char *str );

int main()
{
        char str[] = "abcd";
        delchar( str );
        return 0;
} 

void delchar( char *str )
{
        int i = 0;
        while(str[i]!='\0')
    {
            i++;
            printf("str代表的地址:%x\n", str );
    }
}
  
str代表的地址:62fe10
str代表的地址:62fe10
str代表的地址:62fe10
str代表的地址:62fe10
我们改为指针方式指针方式,看下面
int i = 0;
    while(*str!='\0')
    {
        i++;
        str++;
        printf("str代表的地址:%x\n",str);
    }
str代表的地址:62fe11
str代表的地址:62fe12
str代表的地址:62fe13
str代表的地址:62fe14
你会发现str的地址发生了改变,所以要用str-=i
其实对于数组也是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-11 23:25:54 | 显示全部楼层
大过年的,有人回答了,我就不回答了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-12 21:41:08 | 显示全部楼层
你把数组当成指针看就可以了,下标就等于指针的偏移,
char str[]{"xxxxx"};
char*  a{str};
这个时候
a的内容=str[0]地址;
所以
a[1]=str[1]  ----> a[0]+1个char=str[0]+1个char   

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-19 18:09:40 | 显示全部楼层
a[n] 等价于 *(a+n); a指向的位置没有发生改变。
a++ 等价于 a=a+1; a指向的位置已经改变了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 15:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表