目录
1.指针
如何产生地址?
32位计算机:32根地址线/数据线
32位电信号产生的可能性:32位0~32位1 是2^32个二进制序列,作为内存地址
int main()
{
int a=10; //4个字节
int *p=&a; //取地址 int*是一种类型 ,p是指针变量,p指向的对象a是int类型的
//有一种变量是用来存放对象地址的——指针变量
//*——解引用操作符
*p=20;
printf("%d\n",a);//20
printf("%p\n",&a);//0076FB34
printf("%p\n",p);//0076FB34
return 0;
}
指针变量的大小:例如*p的大小(4字节)
*p=&a,指针变量取的是地址,地址32位=4字节
64位机器,指针大小是8字节
可以用sizeof()例如:
int main()
{
printf("%d\n",sizeof(char*)); //4
printf("%d\n",sizeof(int*)); //4
printf("%d\n",sizeof(double*)); //4
printf("%d\n",sizeof(short*)); //4
return 0;
}
例子:
int main()
{
double d=3.14;
double* pd=&d;
*pd=5.5; //d=5.500000
printf("%lf\n",d); //5.500000
printf("%lf\n",*pd); //5.500000
printf("%d\n",sizeof(pd)); //4 32位机器--4字节 64位--8字节
return 0;
}
2.结构体
自己创造出来的一种类型
//结构体
//人——复杂对象 名字+身高+年龄+身份号码+...
//书——复杂对象 书名+作者+出版社+定价+书号
//创建一个结构体类型
struct Book
{
char name[20]; //c语言程序设计
short price; //55
};
int main()
{
//利用结构体类型创建一个该类型的结构体变量
struct Book b1 ={"C语言程序设计",55};
struct Book* pb=&b1;
//利用pb打印出我的书名和价格
printf("%s\n",(*pb).name);
printf("%d\n",(*pb).price); //. 结构体变量.成员
printf("%s\n",pb->name ); //-> 结构体指针->成员
printf("%d\n",pb->price);
//printf("书名:%s\n",b1.name);
//printf("价格:%d元\n",b1.price);
//b1.price =15;//修改价格
//printf("修改后价格:%d元\n",b1.price);
//修改书名
//由于name是数组,不可以直接用b1.name="c++"
strcpy(b1.name,"c++"); //把c++拷贝到b1.name
//strcpy-string copy-字符串拷贝——库函数——string.h
return 0;
}