您的位置:首页 > 编程语言 > C语言/C++

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c 指针