黑马程序员--指针

来源:互联网 发布:java程序设计教程赵辉 编辑:程序博客网 时间:2024/05/22 04:50

——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;}
0 0