我真的不明白我是否以及何时需要声明指向我的数据结构的指针。
我有两个程序,两个程序都是一样的,但我不知道我应该在哪里需要指针。
以下是计划:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct data
{
char *ptr;
};
void printStruct( struct data pers );
int main (void)
{
struct data pers; // Here pers is not a POINTER
pers.ptr = malloc(sizeof (char) * 256);
strcpy(pers.ptr, "Hello World");
printStruct(pers);
free(pers.ptr);
}
void printStruct( struct data pers ){
printf("PTR = %s\n", pers.ptr);
}
我什么时候需要一个指针?
如您所见,这里struct data pers;
我声明了一个变量,在下一个例子中我使用的是指针:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct data
{
char *ptr;
};
void printStruct( struct data *pers );
void printStruct( struct data *pers ){
printf("PTR = %s\n", pers->ptr);
}
int main (void)
{
struct data *pers; // Here pers is a POINTER
pers = malloc(sizeof(*pers));
pers->ptr = malloc(sizeof (char) * 256);
strcpy(pers->ptr, "Hello World");
printStruct(pers);
free(pers->ptr);
free(pers);
}
答案 0 :(得分:4)
有四种情况, 使用指向struct
的指针:
struct
类型的参数:
struct foo { int member; }
void updateFoo( struct foo *bar )
{
bar->member = some_new_value();
}
int main( void )
{
struct foo f = {0};
...
updateFoo( &f );
}
struct
类型的实例:
struct foo *farr = malloc( sizeof *farr * NUM_ELEMENTS );
struct
类型:
struct foo { int x; char y[]; }
struct foo *instance = malloc( sizeof *instance + LENGTH_FOR_Y_MEMBER );
struct foo
的每个实例都指向struct foo
的不同实例:
struct list_node { int data; struct list_node *next; }
这是单链表的常见实现 - 列表的每个元素都明确指向列表中的下一个元素(如果在最后一个元素,则为NULL
)。
你也可以选择将一个指向struct
的指针传递给一个函数,即使该函数没有修改参数,只是为了节省在被调用函数中创建副本的开销,特别是如果struct
类型很大:
struct ginormous { /* define many large members here */ };
void blah( const struct ginormous *g )
{
// do stuff with g
}