指针:
1.指针定义与使用
sizeof(p)不管是指向什么类型的指针,它的sizeof(p)都是4,即4个字节(32位的地址)
int *p
char *p
float *p
struct NODE *p
*p+1 取值,值加一
++(*p) 取值,值加一
(*p)++ 取值,值加一
++*p 取值,值加一
++(*p)取值,值加一
*p++ 取值,指针加一
*++p 指针先加一,取值
*(p+1) 指针先加一,取值
指针与空值比较:
if(p==NULL)
对于返回指针的函数返回值一定要用if(p==NULL)做判断,否则很有可能p指向一个未知的危险地址
if(p) 危险(未初始化、初始化、释放后)if(p)条件都为真
指针变量未赋值时,可以是任意值,是不能使用的,会造成意外错误。而指针变量给NULL值后,则是可以使用的,只是不指向具体的变量。
定义一个指针时,最好初始化p=NULL;
2.指针运算
int *p,*q;
p++
p--
p+1
p-1
p-q;
p>q;
以当前定义为例:
规则:1.指针做加1或者减1运算代表指向下一个int类型的数据或者前一个int类型的数据,指针指向的位置是当前地址加上sizeof(int),或者当前地址减去sizeof(int)
2.指针之间可以做减法运算,前提是两个指针类型一致,指向同一数据元素(比如指向同一数组)
减法的含义代表两个指针之间元素的个数;
3.指向同一数据元素(比如指向同一数组)指针可以比较大小,p>q;
1.指针定义与使用
sizeof(p)不管是指向什么类型的指针,它的sizeof(p)都是4,即4个字节(32位的地址)
int *p
char *p
float *p
struct NODE *p
*p+1 取值,值加一
++(*p) 取值,值加一
(*p)++ 取值,值加一
++*p 取值,值加一
++(*p)取值,值加一
*p++ 取值,指针加一
*++p 指针先加一,取值
*(p+1) 指针先加一,取值
指针与空值比较:
if(p==NULL)
对于返回指针的函数返回值一定要用if(p==NULL)做判断,否则很有可能p指向一个未知的危险地址
if(p) 危险(未初始化、初始化、释放后)if(p)条件都为真
指针变量未赋值时,可以是任意值,是不能使用的,会造成意外错误。而指针变量给NULL值后,则是可以使用的,只是不指向具体的变量。
定义一个指针时,最好初始化p=NULL;
2.指针运算
int *p,*q;
p++
p--
p+1
p-1
p-q;
p>q;
以当前定义为例:
规则:1.指针做加1或者减1运算代表指向下一个int类型的数据或者前一个int类型的数据,指针指向的位置是当前地址加上sizeof(int),或者当前地址减去sizeof(int)
2.指针之间可以做减法运算,前提是两个指针类型一致,指向同一数据元素(比如指向同一数组)
减法的含义代表两个指针之间元素的个数;
3.指向同一数据元素(比如指向同一数组)指针可以比较大小,p>q;