C语言指针总结
- 指针变量与指针
百度百科:{
1、“指针”是概念,“指针变量”是具体实现。指针也是一个变量,所以需要我们进行定义,而对于指针的定义,与一般变量一样。
2、一个变量的(内存)地址称为该变量的“指针”,通过指针能找到以它为地址的内存单元。而指针变量是用来存放另一个变量的地址的(即指针)。
3、指针和指针变量是两个不同的概念,但要注意的是,通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样。
}
我们所用的函数,变量,常量,在计算机中得存在内存里,指针就是存它的位置的“坐标“(地址)(地址是个数,):0x20393032之类的
而指针变量就是一个内容物为地址(指针)(“坐标“)的变量,跟平时的 int
i,char c ,double d,float f 在本质上没有区别
指针变量所指首地址与步长
指针变量需要定义类型,因为这样更方便我们使用,
(可以同时规定其读取规则与移动距离)
如果定义指针变量时不需要定义所指类型,我们可能在用的语法:
指针与指针变量的取值取址
*,&,可以简单的理解成对于一个数,字符,函数,取了多少次地址,就得取多少次值才能变回来(其实不是所有一次又一次取址的啦)
指针与二维数组与N维数组
与上述概念相通,对于一个二维数组,我们定义其数组名为指针变量,值为首地址,而其取值后,变成在y轴上移动的一个指针(也可理解为步长为x轴定义域的指针,也可理解为一个指向一维数组的指针(值为一维数组首地址,对其取值结果为一维数组首元素))
即对于a【5】【6】:
有*(a+i)=a【i】(在二维数组中a【0】,a【1】……………. 分别指其所对应一维数组首地址)
有*(*(a+i)+j)==a【i】【j】
指针做函数参数
指针变量中存的是一个地址,地址是个数,那自然可以将地址作为参数传入函数:
定义(声明):
Void jijiji (int *p , int p[][5]
, int **p )
{
}
指针做函数返回值
在函数的学习中,我们知道:在定义一个函数时,需要确定其类型(即返回值类型),因为在函数调用时,语法的关系,使得函数看上去就像是一个变量(实在想不明白就这么理解吧TAT,至少能记住Orz){
I+=ppp(I,j,p);
Print(ppp(i),sda());
}
那么当函数返回指针类型时,必然会对其进行定义,这时还是把它(函数)当成个普通变量就好
Eg:
{返回int指针的 一个指向int的指针变量
Int
- test() int * tets;
{
}
完全一致(滑稽)
}
指针变量存取自定义空间指针(地址)
(举个栗子叭,我喜欢calloc)
原型
: void *calloc(size_t n,
size_t size);
Eg:
Calloc(10,sizeof(int)*20);
返回一个10*20 的空间的
首地址,
(int*)Calloc(10,sizeof(int)*20);
强制转换成int类型(将读取规则强制改变)