相关疑难解决方法(0)

对解除引用的指针进行后递增?

试图理解C中指针的行为,我对以下内容感到有点惊讶(下面的示例代码):

#include <stdio.h>

void add_one_v1(int *our_var_ptr)
{
    *our_var_ptr = *our_var_ptr +1;
}

void add_one_v2(int *our_var_ptr)
{
    *our_var_ptr++;
}

int main()
{
    int testvar;

    testvar = 63;
    add_one_v1(&(testvar));         /* Try first version of the function */
    printf("%d\n", testvar);        /* Prints out 64                     */
    printf("@ %p\n\n", &(testvar));

    testvar = 63;
    add_one_v2(&(testvar));         /* Try first version of the function */
    printf("%d\n", testvar);        /* Prints 63 ?                       */
    printf("@ %p\n", &(testvar));   /* Address remains identical         */
}
Run Code Online (Sandbox Code Playgroud)

输出:

64
@ 0xbf84c6b0

63
@ 0xbf84c6b0 …
Run Code Online (Sandbox Code Playgroud)

c pointers operator-precedence

51
推荐指数
6
解决办法
4万
查看次数

对于指针,++与+ = 1相同吗?

我想重构我的一些旧的C代码,我很好奇,如果我可以取代所有ptr++ptr += 1其中ptr一些指针,在不改变任何行为.以下是K&R第5.3节中我的意思的一个例子:

/* strlen: return length of string s*/
int strlen(char *s)
{
    int n;
    for (n = 0; *s != '\0'; s++)
        n++;
    return n;
}
Run Code Online (Sandbox Code Playgroud)

当我替换s++使用时s += 1,我得到相同的结果,但我想知道是否所有类型的情况.我也做了ints 测试:

int size = 10;
int *int_array = (int*)calloc(size, sizeof(int));
for (int i = 0; i < size; i++)
    int_array[i] = i;

for (int i = 0; i < size; i++) {
    printf("*int_array = %d\n", i, *int_array); …
Run Code Online (Sandbox Code Playgroud)

c pointers post-increment

6
推荐指数
1
解决办法
336
查看次数

标签 统计

c ×2

pointers ×2

operator-precedence ×1

post-increment ×1