首页 > 代码库 > 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语言学习-指针探究
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。