簡體   English   中英

函數中使用的結構指針

[英]Pointer on Struct used in function

我在C中有一些帶有指針和結構的問題:我有2個struct Signal實體和指向activeSignal的指針來存儲其中一個實體。 現在,我想在我的函數printParameters()使用這個“存儲”實體來打印我的struct的值。 不幸的是,我的微控制器顯示器打印出一些象形文字而不是我的價值。 我不得不承認我並沒有完全通過指針算術來查看......

struct SigParameter {
  char *name;
  int value;
};

struct Signal {
  struct SigParameter signalchar;
};

int main(void) {
  struct Signal s1;
  struct Signal s2;
  s1.signalchar.name = "Sinus";
  s2.signalchar.name = "Rect";
  struct Signal *activeSignal = &s1;

  printParameters(activeSignal);
}

void printParameters(struct Signal *s) {
  lcdPrintf(0,11,9,"%s", s->signalchar.name);
}

在這里,您的代碼中存在一些小錯誤。 我相信這些都是拼寫錯誤。

  1. 沒有printParameters()前瞻性聲明。
  2. 在你的main() ,調用的函數是printParameter() ,它應該是printParameters()
  3. struct SigParameter signalchar后缺少分號

但是,我沒有看到使用struct Signal *activeSignal = &s1;邏輯struct Signal *activeSignal = &s1; 如果您只是想打印該值。

您可以查看以下代碼。

#include <stdio.h>
#include <stdlib.h>


struct SigParameter {
 char *name;
 int value;
};

 struct Signal {
 struct SigParameter signalchar;
};

void printParameters(struct Signal s);

int main(void) {
 struct Signal s1;
 struct Signal s2;
 s1.signalchar.name = "Sinus";
 s2.signalchar.name = "Rect";

 printParameters(s2);
    return 0;
}

void printParameters(struct Signal s) {
    printf("%s\n", s.signalchar.name);
}

我使用簡單的printf()而不是你的lcdPrintf() ,但它工作正常。

輸出:

[sourav @ broadsword temp] $ ./a.out

矩形

struct SigParameter signalchar

在這個分號中沒有放置。 可能是個錯誤。

然后在將值賦給字符指針時,必須為該指針分配內存。 否則,它會將值存儲在寄存器存儲器中。

s1.signalchar.name = "Sinus";
s2.signalchar.name = "Rect";

您可以為該指針變量分配內存並執行該操作。

然后你正在調用該函數

   printParameter(activeSignal);

但功能是,

   printParameters(activeSignal);
#include <stdio.h>
typedef struct{
    char *name;
    int value;
}SignalParameters;

typedef struct{
    SignalParameters signalchar;
}Signal;
void printSignal(Signal* s);
int main(void) {
    Signal s;
    s.signalchar.name = "Sinus";
    printSignal(&s);
    return 0;
}

printSignal(Signal * s) {
    printf("%s", s->signalchar.name);
}

這對我來說對gcc-4.8.1很有用,所以你的指針算術沒什么問題。 它可能與您的微控制器的clib有關。 為了給出更有用的答案,我們需要知道你正在使用哪個微控制器,我們需要lcdPrintf的定義。
順便說一下,typedef安全地在C中輸入很多東西;-)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM