構造体と関数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

構造体と関数

#1

投稿記事 by » 16年前

こんにちは。いつもお世話になっています。
C言語は初心者でテキストを見ながら進めています。
WindowsのVistaを使っています。

今回質問させて頂くのは、構造体に関することです。
#include <stdio.h>
#include <string.h>

struct seiseki {
    int no;
    char name[20];
    double average;
};

struct seiseki seiset( void );

int main( void )
{
    struct seiseki sei;

    sei = seiset();

    printf( "%d %s %f\n", sei.no, sei.name, sei.average );

    return 0;
}

struct seiseki seiset( void )
{
    struct seiseki sei2;

    sei2.no = 1001;
    strcpy( sei2.name, "中田太郎" );
    sei2.average = 76.5;

    return sei2;
}
・seiset関数内でsei2 = { 1001, "中田太郎", 76.5 };というふに初期値を設定することと、上記のように設定
 することに何か違いみたいなものはあるのでしょうか?

・main関数内で、struct seiseki sei;と構造体宣言しているのですが、この時、(int no; char name[20],   double average)分、メモリーに割り当てられるのですか?

box

Re:構造体と関数

#2

投稿記事 by box » 16年前

> ・seiset関数内でsei2 = { 1001, "中田太郎", 76.5 };というふに初期値を設定することと、上記のように設定
>  することに何か違いみたいなものはあるのでしょうか?

struct seiseki sei2 = { 1001, "中田太郎", 76.5 };

のように、変数sei2の定義と初期化を同時に行なう場合のことですね?
両者の間に違いはありません。

> ・main関数内で、struct seiseki sei;と構造体宣言しているのですが、この時、(int no; char name[20],   double average)分、メモリーに割り当てられるのですか?

正確には、sizeof(struct seiseki)というサイズです。
それが、構造体の各メンバーのサイズを足し合わせた値と
同じになるとは限りません。
なぜなら、構造体定義におけるメンバーの並び順やサイズによっては、
メンバーとメンバーとの間に境界合わせのための
すき間(パディング)が入ることがあるためです。

閉鎖

“C言語何でも質問掲示板” へ戻る