初识C语言
本篇重点
- 指针
- 内存
- 指针变量的大小
内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是一个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
变量是创建在内存中的(在内存中分配一块空间存储变量),每个内存单元都有地址,所以变量也会有地址。
能够取出变量的地址,也就能够更加简单快捷的访问到该变量。
取出变量地址
#include<stdio.h>
int main() { //&num,就取出了num的地址
int num = 10; //打印地址用%p
printf("%p\n",&num);//打印num的地址
return 0;
}
注意:
一个int类型占四个字节,每个字节都有地址,但变量的地址只取第一个地址
定义指针变量存储地址
#include<stdio.h>
int main(){
int num = 10;
int* p = #//创建一个指针变量p存放地址,类型是int*
return 0;
}
注意:
int型变量的地址只能用int*型的指针变量来存储
char型变量的地址只能用char*型的指针变量来存储
···
结论:
创建一个指针变量可以存储地址,但是指针变量类型和地址处的变量类型要对应。
通过指针访问内存
#include<stdio.h>
int main(){
int num = 10;
int* p = #
*p = 20;//*p可以直接访问到num的内存,也就可以对num进行赋值修改
printf("%d",num);
return 0;
}
操作符*
*被称为解引用操作符
*指针变量,可以访问该指针指向的内存
结论:
解引用指针变量,可以访问内存,并且可以对内存内容进行修改
指针变量的大小
#include<stdio.h>
int main()
{
printf("%d\n", sizeof(char *));
printf("%d\n", sizeof(short *));
printf("%d\n", sizeof(int *));
printf("%d\n", sizeof(double *));
return 0;
}
注意:
指针变量的大小取决于地址的大小
结论:
在32位平台下地址是32个bit位,指针大小也就是4个字节
在64位平台下地址是64个bit位,指针大小也就是8个字节