黑马程序员--指针

Java培训与指针运用

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

/*
指针与数组 :指向一位数组元素的指针

数组元素的访问方式
1》数组名[下标]ages[i]
2》指针变量名[下标]p[i]
3> *(p + i)
指针变量的加一 取决于指针类型
*/

指针的简单运用

int main()
{
    int ages[5] = {10, 2, 3, 8, 66};
    int *p;
    p = &ages[0];
    // 数组名就是数组的地址,也是数组首元素的地址
    // p = ages;

    /*
     p---->&ages[0]
     p + 1---->&ages[1]
     p + 2---->&ages[2]
     p + i---->&ages[i]
     */

    // printf("%d\n",*p(p + 2));

    // printf("%d\n",p[2])

    for (int i = 0; i<5; i++)
    {
        printf("ages[%d]=%d",i,*(p+i));
    }
    return 0;
}

/*指针与字符串
掌握
1》定义字符串的两种方式
1.利用数组
char name[] = “itcast”;
特点:字符串里的字符可以修改
使用场合:字符串的内容需要经常修改

2.利用指针
char *name = “itcast”;
特点:字符串里的字符不能修改,是常量字符
使用场合:字符串的内容不需要经常修改,而且这个字符串经常使用#include

 #include <string.h>
 int string_len(char *s);

 int main()
 {
 char a[] = "itcast123123123";

 int longth = string_len(a);

 printf("%d\n",longth);

 return 0;
 }

 int string_len(char *s)
 {
 return strlen(s);
 }

指针数组与字符串的输入

int main ()
{
    char *name = "jack"

    // 指针数组 (字符串数组)
    char *name[5] = {"jack","jim", "rose"};

    // 二位字符数组
    char name2[2][10] = {"jack", "rose"};

    return 0;
}

指向函数的指针

1.为什么指针可以指向一个函数函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。

2.指向函数的指针的定义
定义的一般形式:函数的返回值类型 (*指针变量名)(形参1, 形参2, …);

3.使用注意
由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的
指向函数的指针变量主要有两个用途:
调用函数
将函数作为参数在函数间传递

4.定义指向函数的指针

double (*p)(double, char *, int) = haha;// 函数名就是函数地址

int sum(int a, int b)
{
    retrn a + b;
}
int main ()
{
    // 定义指针变量指向sum函数
    // 左边的int:指针变量p指向的函数返回int类型的数据
    // 右边的(int, int):指针变量p指向的函数有2个int类型的形参
    int (*p)(int ,int);

    p = sum;

    int c = p(12, 32);

    printf("c is %d\n", c);

    return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值