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/

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。