C指针麻烦

itd*_*ork 11 c pointers

这是交易.我有一个大字符数组,我试图操纵它.这是我用来测试这个想法的一些代码:

#include <stdio.h>

char r[65536],*e=r;

main() {
    e+=8;
    while(*e) {
        *e+=1;
        e+=5;
        *e-=1;
        e-=1;
    }
    *e+=1;
    printf("%i",*e);
    printf(" %c",e);
}
Run Code Online (Sandbox Code Playgroud)

它应该做的是:

  1. 将第一个元素设置为8
  2. 然后,当前元素不为零,
    1. 移动到下一个单元格
    2. 添加5到它
    3. 回去
    4. 减去一个.(这会重复8次,因为当它减去最后一次时,while测试会失败)
  3. 显示指针的位置
  4. 显示指针指向的数组的内容(我希望)

它能做什么:

1 ?
Run Code Online (Sandbox Code Playgroud)

而不是

40 (   
Run Code Online (Sandbox Code Playgroud)

^^ 8 x 5 = 40,这就是它应该显示的内容.

接受任何提示/建议/批评.

Arm*_*yan 10

你提领正是你应该没有,反之亦然.你打算做的是:

*e+=8;
while(*e) {
    e+=1;
    *e+=5;
    e-=1;
    *e-=1;
}
*e+=1;
printf("%d",e - r); //index
printf(" %p",e); //pointer value      
printf(" %c",*e); //pointee value
Run Code Online (Sandbox Code Playgroud)

* 检索指针指向的值.

  • 不完全是".`while`的控制条件是正确的. (3认同)

und*_*gor 7

"将第一个元素设置为8"即可

*e = 8;
Run Code Online (Sandbox Code Playgroud)

"移动到下一个单元格"将是

e += 1;
Run Code Online (Sandbox Code Playgroud)

等等.

有了e您正在访问的指针地址.递增/递减它将使指针前后移动.

随着*e您访问它指向的值(取消引用它).

你大部分时间都在反过来使用它.

备注:注意,在声明中e你必须写入char *e = r;初始化指针(而不是值).这里*指定了类型e.声明如下:e是一个指针char,它的值是(地址)e---它类似于char *r; r = e;.

  • `e`是位置.`*e`是值. (3认同)

Mic*_*sen 6

*e 取消引用指针; 也就是说,它操纵指向的值.操纵指针本身意味着e直接操作.

当你这样做时e+=5,你将指针向前移动5个空格,如果你这样做*e+=5,那么你将指针指向的值加5.