IOS开发学习笔记006 - 指针

C语言 指针

简单使用如下:

  int *p;//定义

  int a = 10;

  p = &a;//赋值

  int * b = &a;//定义并赋值

定义格式:类型 *指针变量名;

注意事项:

1、一定要先定义后赋值,用完记得清空。

2、%p输出指针里面存储的地址值。

3、清空指针可以用 p = 0;或p = NULL;

 

代码示例

 1 #include <stdio.h>
 2 
 3 
 4 //结构体指针测试
 5 struct pStruct
 6 {
 7     int a;
 8     float b;
 9     double d;
10 };
11 
12 //函数指针测试
13 void pFunc();
14 int main()
15 {
16     int *p ;//定义
17     int a = 1000;
18     p = &a;//赋值
19     printf("%d\n",*p);
20     printf("%lu\n",sizeof(p));//指针长度 8
21     
22     
23     char *cp;
24     char c = 'a';
25     cp = &c;
26     *cp = 'g';
27     printf("%c\n",*cp);//
28     printf("%lu\n",sizeof(cp));//指针长度 8
29     
30     
31 
32     
33     
34     //指针变量中保存的时变量的地址,地址长度和类型无关,是系统固定的
35     //指针长度和指针类型无关,和系统字长有关,64位长度位8,32位4
36     printf("%lu\n",sizeof(char *));//指针长度 8
37     printf("%lu\n",sizeof(short *));//指针长度 8
38     printf("%lu\n",sizeof(float *));//指针长度 8
39     printf("%lu\n",sizeof(double *));//指针长度 8
40     printf("%lu\n",sizeof(long *));//指针长度 8
41     //函数指针
42     void (*pF)();
43     printf("%lu\n",sizeof(pF));//指针长度 8
44     //数组指针
45     int array[2];
46     int *pArray = array;
47     printf("%lu\n",sizeof(pArray));//指针长度 8
48     //结构体指针
49     struct pStruct *pS;
50     printf("%lu\n",sizeof(pS));//指针长度 8
51     
52     return 0;
53 }

 指针与数组

  定义一个指针,指向一个数组;

  int  array[] = {0,2,4,6,8};

  int *p = array;//array[0] ,指向首地址,数组名就是数组的首地址

 

代码示例

 1 #include <stdio.h>
 2 //指针和数组
 3 
 4 
 5 //输出
 6 void show(int array[],int n);
 7 
 8 int main()
 9 {
10     
11     //1、指向指针的指针
12     int a = 10;
13     int *pa = &a;//定义并初始化一级指针
14     *pa = 899;//改变变量的值
15     printf("一级指针:%d\n",*pa);
16     int **ppa = &pa;//定义并初始化二级指针,其他三级指针类似
17     **ppa = 100;//通过二级指针改变变量的值
18     printf("二级指针:%d\n",**ppa);
19     
20     //2、指向一维数组的指针
21     int array[] = {0,2,4,6,8};
22     int *pArray ;//指针
23     pArray = array;//指向首地址,数组名就是数组的首地址,也可以写array[0]
24     show(pArray,sizeof(array)/sizeof(int));//输出数组,使用指针传参数
25     
26     //*(++pArray);  和 *(pArray+2);的区别,数组指针的p++,p+2 是指指针向下一个元素的首地址
27     int nElement1 = * ++pArray;//2
28     pArray = array;//恢复原值
29     int nElement2 = *(++pArray);//2
30     pArray = array;//恢复原值
31     int nElement3 = *(pArray+2);//4
32     printf("*pArray++:%d \n*(pArray++):%d\n*(pArray+2):%d\n",nElement1,nElement2,nElement3);
33 
34 
35 
36     return 0;
37 }
38 
39 void show(int *array,int n )
40 {
41     //遍历数组
42     printf("数组元素:\n");
43     for (int i = 0 ; i < n; i ++)
44     {
45         printf("%d ",array[i]);
46     }
47     printf("\n");
48 
49 }

 

指针和字符串

 1、字符串变量,可修改

    char str[] = "hello";

 2、字符串常量,不可更改

    char *p = "world";

代码示例

 1 #include <stdio.h>
 2 //指针和字符串
 3 /*
 4  1、字符串变量,可修改
 5     char str[] = "hello";
 6  2、字符串常量,不可更改
 7     char *p = "world";
 8  */
 9 
10 int main()
11 {
12     //字符数组,元素可以自由更改.字符串变量
13     char str[] = "hello";
14     char *pstr1 = str;//定义指针指向字符串
15     printf("%s\n",str);
16     printf("%c\n",*(3+pstr1));
17     
18     //字符串指针,这使用和str[]有本质区别,pstr2指向的字符串不能更改,是一个字符串常量
19     char *pstr2 = "world";
20     char *pstr3 = "world";//pstr3和pstr2指向同一块内存地址
21     *pstr2 = 'A';
22     printf("%s\n",pstr2);
23     printf("%c\n",*++pstr2);
24  
25     return 0;
26 }

 

函数指针和指针函数

 1、返回指针的函数,就以普通函数,只不过返回值是一个指针

 类型名 *函数名(参数列表);

 2、函数指针,指向函数地址的指针,是一个指针,而不是函数,指向函数的首地址

 返回值类型 (*指针变量名)(参数列表);

 函数指针的两种使用方式:

    1、 p();

    2、 (*p)();

函数指针的主要用途:

  1、调用函数

  2、讲函数作为参数再函数间传递

 

 1 #include <stdio.h>
 2 
 3 
 4 
 5 //返回指针的函数
 6 /*
 7  1、返回指针的函数
 8  类型名 *函数名(参数列表);
 9  2、函数指针,指向函数地址的指针
10  返回值类型 (*指针变量名)(参数列表);
11     两种使用方式:
12     1、 p();
13     2、 (*p)();
14  */
15 
16 char* pFunc();//指针函数
17 int (*pf)(int ,int );//函数指针
18 int Function(int ,int);//普通函数
19 
20 int main()
21 {
22     int a = 10;
23     int b = 5;
24     int c = 0;
25    
26     pf = &Function;//将函数指针指向具体的函数,这是pf就相当于函数本身,不过使用更灵活
27     
28     printf("%d\n",pf(a,b));//第一种引用方式
29     printf("%d\n",(*pf)(a,b));//第二种引用方式
30 
31     char *addr = pFunc();//获取函数的返回值,是一个地址值
32     printf("%s\n",addr);//
33     
34     return 0;
35 }
36 
37 //指针函数定义
38 char* pFunc()
39 {
40     char *name = "song";
41     return name;
42 }
43 
44 int Function(int a,int b)//普通函数
45 {
46     return a+b;
47 }

 

 

2015-4-12 今日如此,明日依旧。

 

posted @ 2015-04-12 18:15  struggle_time  阅读(625)  评论(0编辑  收藏  举报