【问题标题】:What's wrong? Why pointer stays constant? [duplicate]怎么了?为什么指针保持不变? [复制]
【发布时间】:2018-09-14 01:06:00
【问题描述】:

我学习了一段时间的 C 编程,我不得不创建一个程序,其中包含一个函数 void hello() 显示单词 'Hello :)' 和数字,函数 hello() 被调用了多少次。下面的代码显示“Hello”,但函数调用的数量保持不变。我只想知道,出了什么问题以及为什么它不能正常工作。

#include <stdio.h>

int main(void) {

void hello(int *p_number);
int number = 1, i;
int* p_number = number;

for (i = 1; i <= 10; i++){
    hello(&p_number);
    printf("Number in cyclus = %d\n", number);
    number++;
}

return 0;
}

void hello(int *p_number){
    printf("number of calling = %d, Hello :)\n", *p_number);
}

【问题讨论】:

  • int* p_number = number; 应该是int* p_number = &amp;number;
  • 虽然完全跳过p_number而直接写hello(&amp;number);可能更惯用和更简单

标签: c


【解决方案1】:

你需要

int* p_number = &number;

hello(p_number);

在呼叫站点。

即将p_number 设置为number地址。并在编译时调高警告级别并阅读它们!在hello 中维护一个指针有相当多的冗余;大概这是为了锻炼?

【讨论】:

    【解决方案2】:
    #include <stdio.h>
    void hello(int *p_number);
    
    int main(void) {
    
        int number = 1, i;
        int *p_number = &number;
    
        for (i = 1; i <= 10; i++) {
            hello(p_number);
            printf("Number in cyclus = %d\n", number);
            number++;
        }
    
        return 0;
    }
    
    void hello(int *p_number) {
        printf("number of calling = %d, Hello :)\n", *p_number);
    }
    

    设置指针指向数字的地址,将指针地址传递给函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 2011-11-12
      • 1970-01-01
      • 2017-11-26
      相关资源
      最近更新 更多