小池有话说

C语言如果没有Struct

2015-10-19

如果C语言没有Struct会怎么样?当然不会怎样。Struct只是语法糖,让我们写起来方便而已。

在C4中,就没有Struct。

举个例子:

struct student {
	char * name;
	int age;
};
int main(int argc, char *argv[])
{
	struct student s;
	s.name = "John";
	s.age = 18;
	printf("student name %s, age %d.\n", s.name, s.age);
	return 0;
}

这里的 struct student 就是语法糖,你完全可以这么写:

int main(int argc, char *argv[])
{
	char *student_name = "John";
	int student_age = 18;
	printf("student name %s, age %d.\n", student_name, student_age);
	return 0;
}

当然,这样挺麻烦的。我们可以这样:

enum {Name, Age};
int main(int argc, char *argv[])
{
	int * s;
	s = malloc(sizeof(int)*2);
	s[Name] = (int)"John";
	s[Age] = 18;
	printf("student name %s, age %d.\n", s[Name], s[Age]);
	free(s);
	return 0;
}

这样,我们也获取到了甜甜的滋味(写起来比较方便,看起来比较简单)。

当然,这里有一个前提就是 sizeof(int) == sizeof(char*)

printf("sizeof(char*)=%d, sizeof(int)=%d\n", sizeof(char*), sizeof(int));

你可以在你的机器上试试。

如果是在64位的机器上,就没那么简单了,struct要做对齐的。我们假定 sizeof(char*)=8sizeof(int)=4

char **s;
s = malloc(sizeof(char**)*2);
s[Name] = "John";
s[Age] = (char*)18;
printf("student name %s, age %d.\n", s[Name], (int)s[Age]);
free(s);
return 0;