dysow 发表于 2021-2-11 19:45:34

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

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

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

数组下标处理

        int i = 0;
        while(str!='\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

qiuyouzhi 发表于 2021-2-11 19:53:06

数组下标本质上就是指针的一个语法糖

永恒的蓝色梦想 发表于 2021-2-11 21:20:44

指针下标, 指针本身没变。
指针自加, 指针本身变了。

一叶枫残 发表于 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!='\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
其实对于数组也是一样的

风过无痕1989 发表于 2021-2-11 23:25:54

大过年的,有人回答了,我就不回答了

2736946915 发表于 2021-2-12 21:41:08

你把数组当成指针看就可以了,下标就等于指针的偏移,
char str[]{"xxxxx"};
char*a{str};
这个时候
a的内容=str地址;
所以
a=str----> a+1个char=str+1个char   

人中仙 发表于 2021-2-19 18:09:40

a 等价于 *(a+n); a指向的位置没有发生改变。
a++ 等价于 a=a+1; a指向的位置已经改变了。
页: [1]
查看完整版本: 数组下标和指针方式的区别?