结构体例子:
`//定义一个结构体后面相当于 用这个结构体声明了一个变量 并且复制 结构体就是一个对象
struct Employee {
char first_name[16];
int age;
} emp= { "员工", 1 };
struct book {
char name[30];
char author[20];
}a[2] = { { "Nature", "Lina" }, { "Animals", "Nick" } };
`
结构体使用:
int _tmain(int argc, _TCHAR* argv[])
{
struct book*p;
struct Employee *p_emp;
p_emp = &emp;
for (p = a; p < a + 2; p++) {
cout << p_emp->first_name << endl;
cout << a << endl;
cout << p << endl;
cout << a+2 << endl;
printf("book name: %s author: %s\n", p->name, p->author);
};
return 0;
}
学习详解:
首先声明一个结构体 Employee 并声明一个结构体变量emp
给emp赋值{ “员工”, 1 };
声明第二个结构体 book 并且用结构体声明一个数组 里面存放两个book;
使用:
可以直接使用点调用例如(emp.age);因为还在学习阶段所以我这里也顺便探究了一下指针,指针变量只能是存放另外一个变量的地址;
所以第一个我使用了指针操作符&取地址 然后使用->操作符输出
至于这个for我在网上看到的:
1.for中对指针p进行了赋值
2.由于指针加法和普通的整数加法是不一样的
3.指针加法是按数据类型的值进行加的
a是一个数组 p=a=a[0] 就是p小于a+2(a[2] ) 所以循环执行了两次从a[0] a[1];
第一次p=第一个元素首地址 第二次p=第二个元素首地址 当第三次p=a+2了 所以循环结束
学习总结:
指针加法是编译器自动按照类型在地址上根据数据类型加上多少字节的,比如
int *类型的指针如果加1,就是在地址上式+4的,比如你定义了一个数组int a[5] = {1,2,3,4,5};
这里你int *p = a;
那么 p 就是a[0]的地址,p+1这里是是不是就是a[1]的地址呢,而a[1]跟a[0]是不是差了4;