目录
目录
时间有限,就到这里吧,下集预告指针进阶或者结构体构造(会教贪吃蛇)
作为初学者,只是分享一下我的见解,欢迎各位大佬来指出错误,给予指导。
指针是什么
作为初学者最先要知道就是什么是指针,为了避免太多的专业术语让初学者头痛,我尽经
量用最简单的语句来描述指针,其实指针就是一个地址(实际上就是一个操作受限的非负
整数)。
#include<stdio.h>
int main()
{
int a;
int *p=&a;
printf("%d",p);
return 0;
}
这是一个普通的指针变量指a的地址。
而这个也就是内存所给a分配的地址,也是p所指向的地址(内存的编码)。
内存是什么(怎么理解)
CPU==============内存条
1kb=2^10b
1mb=2^10kb
1gb=2^10mb
而一般的CPU和内存条之间有32条地址线,由于交流电二频性,计算机也是以0,1来传输信息的,所以32条地址线有2^32种可能,也就是1GB=2^30b,而32条也就是4G的运行内存,就是这么来的。
动态内存和静态内存和数组与指针的关系
像我们平时定义一个数组
int a[10];这样就是一个静态分配,计算机为类型为int的数组分配了连续10个四字节的空间,
如果想要动态分配内存,这个时候可以使用malloc函数(属于malloc.h库函数),malloc函数是memory(内存)allocate(分配)的缩写。malloc函数只有一个形参,且为int型,
通过这个函数我们可以为函数,数组……分配空间
#include<stdio.h>
#include<malloc.h>//必须要加上这个库函数,不然会报错
int main(void)
{
int i=5;
int *p=(int *)malloc(4);
}
int p 本身自己是一个静态分配的,但是p所指向的内存是动态分配的。第六行共分配了八个字节的内存,p变量占用4个字节,怕所指向的内存也占4个字节。
#include<stdio.h>
#include<malloc.h>
int main()
{
int a[5];//共4*5=20个字节
int len;
int *parr;
int i;
//动态构造一维数组
scanf(“%d”,&len);
parr=(int *)malloc(4*len)//如果长整形也可以改8
for(i=0;i<len;i++)
scanf("%d",&parr[i]);
for(i=0;i<len;i++)
printf("%d\n",parr[i]);
free(parr);
return 0;
}
这样就可以起到一维数组的动态分配了,但是有时会遇到数组溢出等情况。
就会用到realloc()函数,如:realloc(parr ,100)将之前数组parr的内存扩充至10
0。