Как передать адрес переменной короткого имени структуры в функцию - PullRequest
0 голосов
/ 27 июня 2019

Как мне передать переменный адрес короткого имени структуры (color) в функцию (fun) аргументов.

#include <stdio.h>

void fun();

struct figure {
    char name[30];
    float field;
} color;

int main(void) {
    fun();  
    return 0;
}

Ответы [ 2 ]

3 голосов
/ 27 июня 2019

Как передать адрес переменной короткого имени структуры

Чтобы передать адрес, вам нужно только &color.

Тогда функция должна принять указатель для структуры рисунка .

Может выглядеть так:

#include <stdio.h>
#include <string.h>


struct figure{
    char name[30];
    float field;
} color;

void fun(struct figure *);  // Function takes pointer to struct figure

int main(void){

    strcpy(color.name, "Joe"); // Initialize color
    color.field = 42.0;

    fun(&color);               // Pass address of color

    return 0;
}

void fun(struct figure *c)
{
    printf("%s\n", c->name);  // Access color using the passed pointer
    printf("%f\n", c->field);
}

Выход:

Joe
42.000000
0 голосов
/ 27 июня 2019

struct figure { ... }; просто вводит новый тип с именем struct figure, тогда как struct figure { ... } color; делает две вещи (1) вводит вышеупомянутый тип и (2) определяет переменную с именем color этого типа.

Чтобы передать объект типа struct figure в функцию, напишите ...

struct figure{
    char name[30];
    float field;
} color;


void fun(struct figure f) {
    printf("%s %f\n", f.name, f.field);
}

int main(void){
    struct figure myObj;
    strcpy(myObj.name, "Hello!");
    myObj.field = 1.0;

    fun(myObj);  

    return 0;
}

Вы также можете передать адрес такого объекта, который затем позволил бы функциитакже измените первоначально переданный объект:

void fun(struct figure *f) {
    f->field = 2.0
    printf("%s %f\n", f->name, f->field);
}

int main() {
    ...
    fun(&myObj);
...