首页 > 代码库 > c语言学习-指针探究

c语言学习-指针探究


1:指针定义格式:
格式:变量类型 *变量名用途:指针变量用于储存地址(only),也就是根据地址值,访问对应的存储空间。

注意。int *p 只能指向int类型的数据;

 例: int a = 20;int *p;p = &a;//既p代表地址,*p代表值//这时的* 代表指针变量p指向的存储空间,目的:改变p代表的地址指向的空间。

任何指针类型,都是占用8字节的存储空间。

指针的长度,是要根据指向的数据的地址,来取多少长度的数据,所以为防止取错数据需要和指向数据的类型一致。

注意:指针+1:p+1-->调到下一个地址,并非数学意义上的+1 具体取决于定义的类型,如:  int:+4,char:+1,double:+8;

指针数组:
int age[5]
int *p;
p = age;

数组赋给指针,可指针也具有数组的特性
p[i],

下面的上下情况一样的,
void change(int *array){ }

void changge(int array[]){ }

利用指针接收一个数组,指针变量arry指向数组的首元素。 

3:指针与字符串

char name[] = "it";char *name2 = "it"; //name2指向字符串的首字符,由于其是char类型的数据,则只能指向第一个char类型。printf("%c\n",*name2);    -->i指针name2就是代表了字符串的首字符printf("%s\n",name2);        -->it而输出格式%s代表着,他会一致从第一个地址开始输出,知道遇到\0结束
知道了指针的基本用法后,定义字符串的就有两种方式:
char name[] = "it";char *name2 = "it"; name[1]=‘A‘;-->OK*name=‘A‘,-->出错。原因:指针定义的字符串,不可更改, 区别:数组:字符串变量(可更改)     指针:字符串常量(不可更改)char *n1="it";char *n2="it";printf("%p\n%p\n",n1,n2);//查看%p查看地址二者的结果是一样的。指向同一个地址**指针数组与指针字符串的区别char name[]="itcast";  特点:在变量区,内容可以更改 使用场合:字符串的内存需要经常修改 指针字符串char *name="itcast";特点:这个字符串其实是常量字符串(在内存的常量区),里面的字符是不可更改。使用场合,字符串的内存需要不需要修改,而且是经常用到。                    

 

3:指针数组 
char *name[5]={"jack","rose","jael"};
等价与二维字符串数组(字符串数组)
char name[3][5]={"jack","rose","jael"};

 4:指向函数的指针 

  指针用来指向地址,而函数也有地址,指针也可以用来指

  我们知道数组名,代表数组的地址 ,同样,函数名代表函数地址。 

//无返回值,无参void test(){ }//带返回值int sum(int a,int b){return a+b;}//带返回值,同事参数也有指针格式double min(double a,char *s,int a){}int main(){//1,使用void//(*p):固定格式//左边的void:指针变量p指向的函数没有返回值//右边的():代表p指向的函数没有形参void (*p)();p = test;//指针变量p指向test(*p)()://调用test函数,或者p();//2,带返回值int类型int (*p)(int a,int b)//int (*p)(int,int)p = sum;int c = p(4,5);return 0;}//3,double格式double (*p)(double,char *,int);p=min;//或者double (*p)(double,char *,int)=min;

 

作者:Darren

微博:@IT_攻城师

github:@Darren90

出处:http://www.cnblogs.com/fengtengfei/

 

c语言学习-指针探究