数组下标和指针方式的区别?
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
数组下标本质上就是指针的一个语法糖 指针下标, 指针本身没变。
指针自加, 指针本身变了。 本帖最后由 一叶枫残 于 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
其实对于数组也是一样的 大过年的,有人回答了,我就不回答了 你把数组当成指针看就可以了,下标就等于指针的偏移,
char str[]{"xxxxx"};
char*a{str};
这个时候
a的内容=str地址;
所以
a=str----> a+1个char=str+1个char
a 等价于 *(a+n); a指向的位置没有发生改变。
a++ 等价于 a=a+1; a指向的位置已经改变了。
页:
[1]