C语言之指针
2013-11-01 22:25
417 查看
// // main.c // 指针 // // Created by New-World on 13-10-24. // Copyright (c) 2013年 Gary. All rights reserved. // #include <stdio.h> void change(int *n) { *n=10; } #pragma 不能交换外面变量的值,因为基本数据类型作为参数是值传递 void swap(int v1,int v2) { printf("函数调用前:v1=%d,v2=%d\n",v1,v2); int temp; temp=v1; v1=v2; v2=temp; printf("函数调用前:v1=%d,v2=%d\n",v1,v2); } void point_swap(int *v1,int *v2) { printf("函数调用前:v1=%d,v2=%d\n",*v1,*v2); int temp; temp=*v1; *v1=*v2; *v2=temp; printf("函数调用前:v1=%d,v2=%d\n",*v1,*v2); } #pragma 用指针返回多个参数 int sumandMinus(int a,int b,int *c) { *c=a-b; return a+b; } int main(int argc, const char * argv[]) { int num=13; int *p=#//只要把变量的地址值给了指针变量,就是指针变量p指向了num *p=20;//代表访问指针变量p指向的存储空间 int a=12; int b=13; int *s=&a;//一级指针 int **o=&s;//二级指针 **o=50; int ***w=&o;//三级指针 ***w=60;//三级指针指向的存储空间 s=NULL; o=NULL; w=NULL;//释放指针 printf("值传递:a=%d,b=%d\n",a,b); swap(a,b); printf("值传递:a=%d,b=%d\n",a,b); printf("\n"); printf("指针:a=%d,b=%d\n",a,b); point_swap(&a,&b); printf("指针:a=%d,b=%d\n",a,b); //用指针传递多个参数 ************************** int sum; int minus; sum=sumandMinus(45, 2, &minus); printf("sum=%d,minus=%d\n",sum,minus); change(&num); printf("%d\n",num); //指向结构体的指针 ************************** struct Student { int age; char *name; }; struct Student stu={23,"jackson"}; struct Student *sp=&stu; (*sp).age=57; sp->name="mac"; printf("age=%d,name=%s",stu.age,stu.name); }
// // main.c // 指针2 // // Created by New-World on 13-10-24. // Copyright (c) 2013年 Gary. All rights reserved. // #include <stdio.h> #pragma 用指针遍历数组 ****************************************************** void test1() { int a[]={1,2,3,4}; int *p=a; int lenth=sizeof(a)/sizeof(int); for(int i=0;i<lenth;i++) { printf("a[%d]=%d\n",i,*(p+i));//遍历完数组后,p的的值并没有变过 } } void test2() { int a[]={1,2,3,4}; int *p1=a;//让指针指向第一个元素 int lenth=sizeof(a)/sizeof(int); for(int i=0;i<lenth;i++) { printf("a[%d]=%d\n",i,*(p1++));//在遍历数组的过程中,指针的值一直在改变 } } void test3() { int a[]={1,2,3,4}; int lenth=sizeof(a)/sizeof(int); for(int i=0;i<lenth;i++) { printf("a[%d]=%d\n",i,*(a+i));////遍历完数组后,p的的值并没有变过 } } void test4() { int a[]={1,2,3,4}; int *p2=a;//让指针指向第一个元素 for(int i=0;p2<a+4;i++,p2++) { printf("a[%d]=%d\n",i,*p2);//在遍历数组的过程中,指针的值一直在改变 } } void change(char c[]) { c[0]=1; } void change2(char *c) { *c=10; c[2]=11;//也可以传数组 } #pragma 用指针遍历字符串 ****************************************************** void String_() { char s[7]="itcast";//定义的是字符串变量 char *p=s; for (; *p!='\0'; p++) { printf("%c\n",*p); } } void String_2() { char *p="itcast2";//定义的是字符串常量 for (; *p!='\0'; p++) { printf("%c\n",*p); } } #pragma 把函数当参数传入原函数,可以在不用修改原本函数的情况下完成更多功能 ************** int sum(int a,int b) { int c=a+b; printf("%d+%d=%d\n",a,b,c); return c; } int minus(int a,int b) { printf("调用minus函数\n"); int c=a-b; printf("%d-%d=%d\n",a,b,c); return c; } //count函数是用来做a跟b之间的运算至于做什么运算,取决于p int count(int a,int b,int (*p)(int,int)){ return p(a,b); } #pragma 计算字符串的长度 ****************************************************** int length1(char *string) { int counts=0; while (*string++) { counts++; } return counts; } long length2(char *string) { char *s=string;//s的值是第一个字符的地址值 while (*string++); return string-s-1; } #pragma 嵌套结构体 ****************************************************** struct gril { int age; char *name; }; struct AppleN { int age; char *name; struct gril gf; }; struct AppleN d; int main(int argc, const char * argv[]) { char name[]="zghaddasf"; struct AppleN d={3,"dali",{22,"xiaoli"}}; printf("%d,%s,%s",d.age,d.name,d.gf.name); struct AppleN *st=&d; printf("xiaoli的年龄是:%d",(*st).gf.age); // test2(); //char a[3]; // char *p=a; //change(p);//如果函数的参数是一个数组,那既可以传数组也可以传指针,它实际 //上是要求传一个地址 //printf("a[0]=%d\n",a[0]); //change2(a); //printf("a[0]=%d\n",a[0]); //String_(); //String_2(); //定义了一个指向函数的指针变量p // int (*point)(int,int)=sum; (*point)(5,6);//也可以写成point(5,6); // // // int result=count(7, 6, minus); // printf("result=%d",result); int l=length1(name); printf("length1方法字符串的长度是:%d\n",l); long ll=length2(name); printf("length2方法字符串的长度是:%ld\n",ll); }
相关文章推荐
- 关于指针的一些事情
- Linux C函数参考手册(PDF版)
- C#实现打造气泡屏幕保护效果
- C/C++数据对齐详细解析
- C 语言基础教程(我的C之旅开始了)[三]
- C 语言基础教程(我的C之旅开始了)[七]
- 关于c语言指针的两处小tip分享
- C/C++ 宏详细解析
- 浅析iterator与指针的区别
- 探讨C++中数组名与指针的用法比较分析
- C++中指向对象的常指针与指向常对象的指针详解
- 指向变量的常指针与指向常变量的指针详细解析
- php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
- C语言指针学习经验总结浅谈
- 用C#生成不重复的随机数的代码
- C/C++中指针和引用之相关问题深入研究
- 在c和c++中实现函数回调
- 浅析C/C++中被人误解的SIZEOF
- C 语言基础教程(我的C之旅开始了)[六]