您的位置:首页 > 编程语言 > C语言/C++

C语言 结构体与结构体指针用法总结

2017-08-20 17:03 330 查看
在C语言开发中,结构体用到的机会很多。所谓结构体,就是定义一种里面包含多种元素的变量。
我们来看一个简单的例子。比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息。结构体变量定义如下:

structbook
{

 
char name[30];

 
char author[20];

};

structbook
a[2] = { { "Nature","Lina"
},{ "Animals","Nick"
} };

以上代码定义了一个名为book的结构体,然后a作为带有这个结构体的变量的一个内含两本书的列表(结构体数组)。也可以定义为如下:

structbook
{

 
char name[30];

 
char author[20];

}a[2] = { {"Nature","Lina"
},{ "Animals","Nick"
} };

所完成的功能是完全一样的。第二种方法用得更多因为写法更简练。

然后,如果你想看到定义的信息,最直接的方法是把结构体写到main函数里print出来,完整代码如下:

#include<stdio.h>

int
main() {

structbook
{

char
name[30];

char
author[20];

}a[2] = { {"Nature","Lina"
},{ "Animals","Nick"
} };

int
i;

for
(i = 0; i < 2; i++) {

printf("book
name: %s author: %s\n", a[i].name, a[i].author);

};

getchar();

return(0);

}

运行后的输出值为:

book name: Nature    author: Lina

book name: Animals    author: Nick

定义一个指向结构体(book)变量的指针函数p:struct book *p

现在就可以用结构体指针完成上述同样的功能了(结构体定义在main函数里外均可):

#include<stdio.h>

structbook
{

char
name[30];

char
author[20];

}a[2] = { {"Nature","Lina"
},{ "Animals","Nick"
} };

int
main() {

structbook*p;

for
(p = a; p < a+2; p++) {

printf("book
name: %s author: %s\n", p->name, p->author);

};

getchar();

return(0);

}

输出值和之前的程序一样。

以下例子为使用&地址符号给结构体指针赋值:

#include<stdio.h>

structbook
{

char
name[30];

char
author[20];

};

int
main() {

structbook*p;

structbook
a[2] = { { "Nature","Lina"
},{ "Animals","Nick"
} };

p = &a[0];

printf("book
name: %s author: %s\n", p->name, p->author);

getchar();

return(0);

}

输出结果为存入的a[0]的信息:

book name: Nature    author: Lina

另外在许多大型软件的开发中,经常会定义结构体变量为宏变量以简化结构体的引用。例如:typedef struct book{...}BOOK, 引用的时候就直接定义BOOK a。简而言之,就是把struct book替换为BOOK。

#include<stdio.h>

typedefstructbook
{

char
name[30];

char
author[20];

}BOOK;

int
main() {

BOOK*p;

BOOK
a[2] = { { "Nature","Lina"
},{ "Animals","Nick"
} };

p = &a[0];

printf("book
name: %s author: %s\n", p->name, p->author);

getchar();

return(0);

}

运行效果是一样的。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: