目录
一、指针的理解
指针就相当于一个绝对地址,可以通过指针来直接访问或修改内存里存放的“值”,而不是通过变量名。 w访问或修改变量不是通过这种来找,而是像坐标一样找到,房间名可能会变但坐标不会。 y东经北纬来找。
二、指针的表示
#include <stdio.h>
int main()
{
int a = 10;//定义一个变量,内存有一块空间来存放a值
int *p = &a;//int* :是指针变量 &:为取地址符
//将a的地址取出存放到指针变量 p里面
printf("%d",*p);//也可以通过指针来打印
*p=11; //*:解引用 可修改值
printf("%d",a);
return 0;
}
1、指针的大小
在32位电脑中有32根地址线,每根地址线都能表示高电压(1)和低电压(0),那么就有2^32个地址。
由此在32位电脑中存放一个指针要4Byte来进行存储,在64位电脑中要8Byte来存储
三、指针的使用
1、变量访问
指针变量的大小都是相同的,不同位数的电脑除外,
指针的类型决定了,能够访问空间的大小
int* p:*p能够访问4个字节
char* p:*p能够访问1个字节
double *p:*p能够访问8个字节
2、数组的指针
- 数组在内存中存放都是连续的一块区域,不同类型的指针变量,每个内存相距也不同。
- 指针本身的大小在同一平台下都是四个字节的大小,但不同类型的指针,往后跳的范围不同 int后跳4字节 char跳1字节 double跳8个字节。
- 绝大部分数组名就是首元素的地址,将arr和arr[0]的地址都打印出来就会发现,它们的地址都是一个。arr 和sizeof(arr)这里的数组名为整个数组。
3、通过指针来实现计算字符串长度
#include <stdio.h>
int strlen(char* str)
{
char* x = str;
char* y = str;
while (*y != '\0')
{
y++;
}
return y - x;
}
int main()
{
char arr[] = "wo shi xiyangyang. !!!";
printf("%d", strlen(arr));
return 0;
}
4、多级指针
5、指针数组
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = 3;
int* arr[] = { &a,&b,&c };
printf("%d ", *arr[0]);
printf("%d ", *arr[1]);
printf("%d ", *arr[2]);
return 0;
}
本文含有隐藏内容,请 开通VIP 后查看