静态连接:编译时期
动态链接:加载到内存时
ldd a.out :查看a.out运行的环境变量
结构体:
struct stu_info{};
结构体与数组的区别:结构体中的元素数据类型可以不一样,结构体不占空间,但结构体里面的类容占空间
结构体数组:一个结构体变量中可以存放一组数据时定义数组
定义指针访问结构体成员:
#include <stdio.h>
struct date
{
int y,d,m;
};
struct stu_info
{
struct date birth; /*结构体嵌套*/
int num;
char name[20];
char iphone[12];
char sex;
char addr[60];
};
int main(void)
{
struct date *dt;
struct stu_info *p;
strut stu_info st;
={{2002,3,14},103,"nothing","12345678901",'M',"xiangyang"};
dt=p=&st; /*同一个地址不同的访问方式*/
printf("birth:%d-%d-%d\t\n",dt->y,p->birth.m,st.birth.d);
printf("num:%d\tname:%s\tiphone:%s\n",p->num,p->name,st.iphone);
printf("sex:%c\taddr:%s\n",st.sex,st.addr);
return 0;
}
定义类型别名:
例: typedef int s_t; s_t就为int类型的别名
typedef struct stu_info st_t; st_t为该结构体类型的别名
别名的由来:原来定义的类型变量名加上typedef后,变量名就为该类型的别名
返回值是指针或地址的函数:
int *a(int x,int y); 当调用他以后能得到一个纸箱整型数据的指针,int表示返回的指针是指向整型变量,例:
#include <stdio.h>
int *search(int (*arr)[3],int x); /*返回指针的函数声明*/
int main(void)
{
int scor[3][3]={{76,82,92},{77,73,80},{73,23,64}};
int *p;
int n=2,i=0;
printf("Please input anumber(0~2):");
scanf("%d",&n);
printf("The student score:\n");
p=search(scor,n); /*调用返回指针的函数,传递地址*/
for(i=0;i<3;i++)
{
printf("%d\t",*(p+i));
}
printf("\n");
return 0;
}
int *search(int (*arr)[3],int x) /*定义返回指针的函数*/
{
int *pt;
pt=*(arr+x);
return pt;
}