通常情况下,机器的1个字节可以存放一个char类型的数据,2个相邻的字节存储单元可以存储一个short类型的数据,而4个相邻的字节存储单元可存储一个long类型的数据。指针是能够存放一个地址的一组存储单元(通常是两个或4个字节)。
指针和取值
1.指针是一个存储计算机内存地址的变量;
2.从指针指向的内存读取数据称为指针的取值;
3.指针可以指向某些具体类型的变量地址,例如int、long和double。指针也可以是void类型、NULL指针和未初始化指针。 ,
关于操作符*
1.根据出现位置的不同,操作符*既可以用来声明一个指针变量,也可以用作指针的取值。
2.当用在声明一个变量时,*表示这里声明了一个指针。其他情况用到*表示指针的取值。
#include<stdio.h>
int main() {
int x = 1;
int * ptr;
ptr = &x;
* ptr = 2;
printf("%d\n", x); // 2
}
#include <stdio.h>
/*
指针只能指向特定类型的对象,也就是说,每个指针都必须指向某种特定的数据类型。
*/
void main()
{
int x = 1, y = 2, z[10];
int *p;
p = &x;
*p = 2;
printf("%d\n", x);
*p = *p + 2;
printf("%d\n", x);
int *q = p;
printf("%d\n", *q);
}
关于操作符&
&是地址操作符。用来引用一个内存地址。通过在变量名字前使用&操作符,我们可以得到该变量的内存地址。
结构体
#include <stdio.h>
/*
关键字struct引入结构声明,关键字struct后面的名字是可选的,称为结构标记。
struct声明定义了一种数据类型。在标志结构成员表结束的右花括号之后可以跟一个变量表,
这与其他基本类型的变量声明是相同的。
*/
struct point {
int x;
int y;
};
struct user {
int age;
} user1, user2;
void main()
{
struct user user1;
user1.age = 20;
printf("%d\n", user1.age);
}
#include <stdio.h>
/*点*/
struct point {
int x;
int y;
};
/*矩形*/
struct rect {
struct point pt1;
struct point pt2;
};
void main()
{
struct point p1 = {10, 20};
struct point *pp = &p1; // 指向结构体的指针
printf("%d, %d\n", (*pp).x, (*pp).y);
printf("%d, %d\n", pp->x, pp->y);
}