指针
内存: 内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的。 所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
内存是如何编号的? 32位机举例: 32位机—32根地址线(物理线)—通电—电信号转化数字信号—1(+)/0(-)
通电后可能性:2^32 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 … 011111111 111111111 111111111 111111111 10000000 00000000 00000000 00000000 … 111111111 111111111 111111111 1111111111 每一个就是内存单元的地址 每个内存单元的大小是1Byte=8bit
&取地址取得是地址所对应的第一个字节的地址
打印地址
#define _CRT_SECURE_NO_WARNINGS 1;
#include <stdio.h>
int main()
{
int a = 11;
printf("%p", &a);
return 0;
}
指针变量:用于存放地址的
数据类型 * 变量=&a *表示变量是指针,数据类型表示变量执行的对象是什么类型的 例如int * pa=&a 表示pa是指针,pa执行的对象是int型的
#define _CRT_SECURE_NO_WARNINGS 1;
#include <stdio.h>
int main()
{
int a = 11;
printf("%p", &a);
int* pa = &a;
return 0;
}
*间接访问操作符(解引用操作符):通过指针变量内存储存的地址,来找到变量或改变变量的值。 *+指针变量=13(想要改变的值)
#define _CRT_SECURE_NO_WARNINGS 1;
#include <stdio.h>
int main()
{
int a = 11;
printf("%p", &a);
int* pa = &a;
*pa = 108;
return 0;
}
指针大小:
int main()
{
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(long*));
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(float*));
printf("%d\n", sizeof(double*));
return 0;
}
指针大小取决于存储地址所要的空间大小,在32位机上是4Bytes,在64位机上是8Bytes。
结构体:可以创造一些c语言不自带的数据类型,从而来描述复杂对象。 struct + 变量名
struct individual
{
char name[20];
char country[20];
int age;
char sex[5];
float weight;
double height;
};
int main()
{
struct individual I = { "Chris Lin","China",22,"MALE",11.4514,114.514 };
printf("Print 1:\n%s\n%s\n%d\n%s\n%f\n%lf\n\n", I.name, I.country, I.age, I.sex, I.weight, I.height);
struct individual* indi = &I;
printf("Print 2:\n%s\n%s\n%d\n%s\n%f\n%lf\n\n", (*indi).name, (*indi).country, (*indi).age, (*indi).sex, (*indi).weight, (*indi).height);
printf("Print 3:\n%s\n%s\n%d\n%s\n%f\n%lf\n", indi->name, indi->country, indi->age, indi->sex, indi->weight, indi->height);
return 0;
}
|