C语言的核心————指针(1)
学习指针,我们首先要搞清什么是指针?为什么存在指针?指针有哪些类型?多级指针以及指针表达式的一些相关内容。下面我将逐一介绍。
指针是什么?指针变量是什么?变量指针又是什么?指针就是变量,用来存放地址的变量。简言之指针就是地址。指针变量指的是具有存储空间的一个变量,而变量指针就是变量的地址。
那对应到相应的代码块:
int main()
{
int a=10;//在内存中开辟一块空间
int *p=&a;//取出a的地址放入p变量中,p就是一个指针变量
return 0;
}
----------
在这里要强调的是
1.定义就是在内存中开辟一块空间,而声明则不会开辟空间;
2.在32 位平台上,任何指针变量都开辟4个字节,所以一个指针变量的大小就是4个字节。
3.一个小的单元就是一个小的的字节。
计算机的内存分成很多个小的单元,每个单元都对应一个独一无二的地址,这样就一个地址标示一块空间。通过指针 我们就能找到一个对应的地址,指针就起到了标示的作用。 就如变量有不同的类型,整形、浮点形、短整形、长整形、单精度浮点形、双精度浮点形等等,相应的指针变量也具有相对应的类型,由“type+*”的方式构成。
什么类型的指针就存放什么类型变量的地址,如char*类型的地址就存放char类型变量的地址。`
指针的类型决定了指针向前走或向后走一步有多大(指针所指向元素类型的大小)例如:
#include<stdio.h>
int main()
{
int num=10;
char* a=(char*)#
int* b=#
printf("%p\n",a+1);//char形一次移动一个字节
printf("%p\n",b+1);//int 形一次移动4个字节
二级指针:
int a=10;
int *b=&a;
int **bb=&b;
a的地址存放在b中,b的地址存放在bb中,b是一级指针,ze bb是二级指针*b=100->a的值改为100 **bb=100->a的值改为100
`指针的左值和右值
简单理解为位于等号的左边还是右边,做左值的条件是必须具有该变量的贮存空间,做右值的条件是必须有内容。
例如:
&ch//ch是地址常量,不能做左值,只能做右值
cp//为变量,可做左值,也可作右值
*cp+1//常量,只可做右值
*(cp+1)//表示cp的一块空间,可做左值,也可做右值
++cp、cp++//不能做左值,只能做右值
*++cp、*cp++//左右值都可以