目录
一、指针
接着之前的说,char,int,double这些类型都可以,输出时,printf后面的无论是变量还是指针变量都可。
int main()
{
double d = 3.14;
double* pd = &d;
*pd = 5.5;
printf("%lf\n", d);
printf("%lf\n", *pd);
printf("%p\n", pd);
printf("%d\n", sizeof(pd));
return 0;
}
都能正常输出。如果想知道pd的地址,那就printf("%p\n", pd)。
指针变量大小
用上面的代码
指针变量大小32为电脑是4字节,64位是8字节。这个要记住,无论是什么类型的指针,都是4个字节或者8个字节。
二、结构体
struct:利用结构体类型,创建一个该类型的结构体变量。
写到现在,考虑一个问题,如何描述一本书。书名,作者,价格什么的都需要表达出来。但是这些不可能是我们赋值一个值,或者去做循环。这些是复杂对象,想要描述它们。就得需要结构体,结构体是我们创造出来的一种类型,C语言中规定了一个关键字struct,用来做结构体的程序。我们写书名,价格,把它们放在大括号里。声明书名为一个char类型数组,里面可放20个字符,价格为short类型,然后结束这个结构体,注意一定要在结束的大括号后加分号,这是用来专门结束这个类型定义的。看一下代码:
struct Book
{
char name[20];
short price;
};
int main()
{
struct Book b1 = { "C语言程序设计", 55 };
printf("书名: %s\n", b1.name);
printf("价格: %d\n", b1.price);
b1.price = 15;
printf("修改后的价格: %d\n", b1.price);
return 0;
}
来到main函数块里,我们说b1就是这本书,然后给书名,价格到b1里。之后也可以在修改价格。
另有其他的。
struct Book b1 = {"C语言程序设计", 55};
struct Book* pb = &b1; //pb指向b1,b1为struct Book类型,所以pb是struct Book*类型的指针变量
printf("%s\n", (*pb).name);
..............d......................price);
这样也可以打印出书名和价格。但是这样也有点繁琐,需要继续简化。这就可以用到另一个操作符->。
printf("%s\n", pb->name);
..............d...............price);
意为pb指向name,因为pb是一个指针。操作符应用到结构体变量可以找到成员,而->操作符是指针指向成员。到现在为止,所有操作符就写完了。
再写一些。关于改书名 。
struct Book b1 = {"C语言程序设计", 55};
b1.name = "C++"; //如果这样做,就会出错。因为这时候这个数组里的元素"C语言程序设计”是常量字符串,也就是不能更改,只能替换。这里需要用到一个库函数,strcpy。
strcpy(b1.name, "C++")//意思为把C++拷贝到name中。需要有头文件string.h。string copy——strcpy
printf("%s\n", b1.name);
再输出,书名就改为了C++。
struct Book
{
char name[20];
short price;
};
int main()
{
struct Book b1 = { "C语言程序设计", 55 };
printf("书名: %s\n", b1.name);
printf("价格: %d\n", b1.price);
b1.price = 15;
printf("修改后的价格: %d\n", b1.price);
strcpy(b1.name, "C++");
printf("%s\n", b1.name);
return 0;
}
结束。