关于指针

来源:互联网 发布:数据信息知识的关系 编辑:程序博客网 时间:2024/05/19 02:04

 

1,基础
就是一个存放内存地址的变量,该内存地址是另外一个变量的地址;一般来说指针要和函数,结构体,数组 搭配使用;指针在声明的时候没有指向任何位置,在使用之前必须指向一个内存空间,如:
int *p
*p=100
使用明显错误
正确:int *P,int x,p=&x,*p=1;
可以对指针做整型运算,
对于指针来说,无论它指向任何类型的变量,其实都是一个内存地址,是一个整型的,但是,不能说指针就是整型的,之所以还要把指针和具体的变量类型相结合,是为了让指针知道它所指向的数据咱用的字节数,这样指针移动的时候就是块移动。
 
两个简单的运算符:
&----------取地址         *----------------取内容

假设:int x=1,y=2, int *ip(其中ip=1000),有如下关系图示:

 

 

关于*p++,++*p,(*p)++,*(p++),++(*p)
*p++:先去取*p的值,然后指针p+1;
++*p:先去取*P的值,然后该值加1,指针不变;
(*p)++:*p指向的值自增1;
*(p++):取指针加1后的值;
++(*p):先去取*P的值,然后该值加1,指针不变;
如果我定义一个指针:
int *p;
p=(int *)malloc(sizeof(int)*20)
*p=12;
上面的有问题么或者有什么隐患么?

2,指向指针的指针
如:Int **p;//**P是指向*p的内存地址,而*p是指向一个int形数据的内存地址;
以上分析可知:char **p 和char *p[]什么关系呢?
在Linux里C编程常见的main形式
int main(int argc,char *argv[]){…}
这里 argc 是指命令行参数的个数,当然 argc[]里存放的是指针,这些指针每一个指向一个命令行参数,就是字符串;
什么是命令行参数?
在Linux里我们运行一个简单的程序hell为例
#include <stdio.h>
int main(int argc,char *argv[])
{
int i;
for(i=0;i<argc;i++){

printf("%s\n",argv[i]);
 
}
return 0;
}
$:./hell –g
结果是什么呢?
./hello
-g
3,函数指针
顾名思义他是一个指针;函数指针和其他指针的使用范畴一般不同,它主要是用在函数调用时,即作为函数调用的参数,
在通常情况下,我们也许会进行选择性的处理某些数据如:我们有三个方向处理函数A,N,S
其中N---向南处理的函数指针。。。,S----向北处理函数指针。。。。
我们就可以根据需要把N,或者S 作为A的参数进行传递,完成相应的方向操作;
函数指针的定义形如:int (*p)();//就是声明一个指针*p,它指向一个返回值为int型的函数,事实上现在它没有指向任何函数,如果:
inf test();
p=&test;//这样它就指向了test函数,
此外我们在进行含参数函数指针定义:
char (*p)(int);
char test(int);
p=&test;
 
有不足之处,请多多指出,特谢
 

 

原创粉丝点击