A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.        指针和数组
指针可以指向数组,使用指针可以访问一维数组元素。指针指向数组方法如下:
void main()
{
        int a[10];
        int *p = a;//将数组地址赋值给指针p,p指向数组a。这种赋值方式等价于
int *p=&a[0]。
}
2.        指针和字符串
用指针遍历字符串里的所有字符:
传统的方式遍历字符串里的字符:
void main(){
        char s[7] = "shen";
        for (int i=0;s[i]!='\0';i++){
                printf("%C\n",s[i]);
        }
}
用指针来遍历字符串里的字符
void main(){
        char s[7] = "shen";//定义的是字符串变量
        char *p = s;
        for (; *p != '\0';p++){
                printf("%C\n",*p);
        }
}
指针遍历的第二种方法
void main(){
        char *p ="shen";//定义的是字符串常量,常量里面的字符是不可以改动的;const常量的意思。所以以后存储字符串应该注意,
        如果要改动字符串就用数组来存储字符串;如果不改动就用常量存储,这样用指针更方便。       
        for (; *p != '\0';p++){
                printf("%C\n",*p);
        }
}

3.        指针、数组作为函数参数
void change(int c[]){
        c[0] = 1;
}
int main()
{
        int a[3];
        change(a);
        printf("a[0] = %d\n",a[0]);
        return 0;

}
//或者
void change(int c[]){
        c[0] = 1;
}
int main()
{
        int a[3];
        int *p = a;
        change(p);

        printf("a[0] = %d\n",a[0]);
        return 0;
}
以上两个函数运行结果一样,如果一个函数他的参数是数组,我们可以传数组名,也可以指针变量,条件是指针变量类型一样
void change2(int *c)
{
        *c = 10;
}
int main()
{
        int a[3];
        int *p = a;
        change2(a);

        printf("a[0] = %d\n",a[0]);
        return 0;

}
一个函数如果参数是指针类型的时候可以传数组名,也可以传指针变量;这里a可以变成p效果一样;若*c = 10变成*(c=2),则输出的是a[2]的值
另外,还可以这样访问
void change2(int *c)
{
        c[2] = 10;//同样修改a[2]的值
}
int main()
{
        int a[3];
        int *p = a;
        change2(p);

        printf("a[2] = %d\n",a[2]);
        return 0;
        }

4.        指针作为函数返回值
指针是c语言中的一种数据类型,返回指针的一般形式为:类型 * 函数名(参数列表)例如:返回字符串的函数
char *test()
{
        return "shenxian";
}

int main()
{
        printf("%s\n",test());

        return 0;
}
5.        指向函数的指针
指针为什么可以指向一个函数?因为函数也是由一段程序组成的,也需要占内存空间,它也有一个起始地址,因此指针可以指向它,函数名就是函数的地址。
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)
{
        int c = a - b;
        printf("%d - %d = %d\n",a,b,c);
        return c;
}
int main()
{
        //定义的一个指向函数的指针变量p  *p一定要加括号
        //被p指向的函数:返回值为int类型,接收两个int类型的参数,
        int (*p)(int a,int b);
        //让指针变量p指向sum函数
        p = sum;
        //利用指针变量p间接调用sum函数
        //(*p)(7,8);
//        还可以这样调用:
        p(7,8);
        return 0;
}

//指针指向函数的例子如下:
//这里假设count函数用做a,b的运算
int count(int a,int b,int (*p)(int a,int b))
{
        return p(a,b);
}
int main()
{
        //假如算加法,那么调用sum函数
        //int result=count(7,8,sum);
        //假如要算减法,就调用minus函数
        int result=count(7,8,minus);
        return 0;
}
这里可以看到,p指向的函数改变,就可以改变这里的count函数。可以使程序更模块化。

3 个回复

倒序浏览
楼主费心了。
回复 使用道具 举报
1、璇伶来签到啦
2、对昨天有何感想?很充实
3、你今天的目标是什么?学完输入输出流+写完日记
4、你此时此刻的心情?充满斗志
回复 使用道具 举报
感觉棒棒的,终结的很好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马