C语言 指针运算

2025-03-07 08:39:33
推荐回答(6个)
回答1:

#include
int main()
{
char *p,s[20];
int m,n,i;
printf("请输入字符串:");
gets(s);
printf("请问从第几个字符开始删除,要删除几个字符:");
scanf("%d,%d",&n,&m);
for(i=0,p=s+n-1;*p;i++)
*p++=s[n+m-1+i];
printf("得新的字符串:");
puts(s);
return 0;
}

回答2:

#include

int main(void)
{
        char *p, s[20];
        int m, n;
        printf("请输入字符串:");
        gets(s);
        printf("请问从第几个字符开始删除,要删除几个字符:");
        scanf("%d,%d", &n, &m);

        p = s + n - 1 + m;
       do {
                *(p - m) = *p; 
       } while (*p++);

        printf("得新的字符串:");
        puts(s);
        return 0;
}

请输入字符串:123456

请问从第几个字符开始删除,要删除几个字符:2,3

得新的字符串:156

回答3:

110.246.174.*
IP
发表于 2010-02-28 12:51:572
初学者要注意,*p+n和*(p+n)是不同的,前者是先取值再加n,后者是先移动指针再取值。指针p进行p±n运算后,其结果得到一个新的地址,即指向了新的存储单元,而p本身的地址值并未发生变化,即它仍指向原来的存储单元(如上例中pb、py分别指向变量b和y)。当对指针进行

p++p--++p--p

运算后,指针p本身的值会发生变化,即p不再指向原先的对象,而会指向新的对象。

回答4:

/*
 * 改动最少
 */
#include 
#include 
main()
{
char *p, s[20];
int m, n, i;
printf("请输入字符串:");
gets(s);
printf("请问从第几个字符开始删除,要删除几个字符:");
scanf("%d,%d", &n, &m);
for (i = n - 1; i < strlen(s); i++) //最大值用strlen(s)
s[i] = s[i+m];                  //错位赋值
printf("得新的字符串:");
puts(s);
return 0;
}

运行截图:

回答5:

对字串s没有做操作啊

p=s;
for(i=0,j=0;s[i];i++)
if(i=m+n)*(p+j++)=s[i];
*(p+j)=0;
puts(p);

回答6:

根据函数执行的效果,显然你的理解是错的
*b++=0;
相当于*b=0;b=b+1;
这里的++是要等b参与的运算结束之后再加1
注意
++b

b++
的区别