IOS开发学习笔记006 - 指针
2015-04-12 18:15
405 查看
C语言 指针
简单使用如下:int *p;//定义
int a = 10;
p = &a;//赋值
int * b = &a;//定义并赋值
定义格式:类型 *指针变量名;
[b]注意事项:[/b]
1、一定要先定义后赋值,用完记得清空。
[b]2、%p输出指针里面存储的地址值。[/b]
[b]3、清空指针可以用 p = 0;或p = NULL;[/b]
代码示例
#include <stdio.h> //结构体指针测试 struct pStruct { int a; float b; double d; }; //函数指针测试 void pFunc(); int main() { int *p ;//定义 int a = 1000; p = &a;//赋值 printf("%d\n",*p); printf("%lu\n",sizeof(p));//指针长度 8 char *cp; char c = 'a'; cp = &c; *cp = 'g'; printf("%c\n",*cp);// printf("%lu\n",sizeof(cp));//指针长度 8 //指针变量中保存的时变量的地址,地址长度和类型无关,是系统固定的 //指针长度和指针类型无关,和系统字长有关,64位长度位8,32位4 printf("%lu\n",sizeof(char *));//指针长度 8 printf("%lu\n",sizeof(short *));//指针长度 8 printf("%lu\n",sizeof(float *));//指针长度 8 printf("%lu\n",sizeof(double *));//指针长度 8 printf("%lu\n",sizeof(long *));//指针长度 8 //函数指针 void (*pF)(); printf("%lu\n",sizeof(pF));//指针长度 8 //数组指针 int array[2]; int *pArray = array; printf("%lu\n",sizeof(pArray));//指针长度 8 //结构体指针 struct pStruct *pS; printf("%lu\n",sizeof(pS));//指针长度 8 return 0; }
指针与数组
定义一个指针,指向一个数组;int array[] = {0,2,4,6,8};
int *p = array;//array[0] ,指向首地址,数组名就是数组的首地址
代码示例
#include <stdio.h> //指针和数组 //输出 void show(int array[],int n); int main() { //1、指向指针的指针 int a = 10; int *pa = &a;//定义并初始化一级指针 *pa = 899;//改变变量的值 printf("一级指针:%d\n",*pa); int **ppa = &pa;//定义并初始化二级指针,其他三级指针类似 **ppa = 100;//通过二级指针改变变量的值 printf("二级指针:%d\n",**ppa); //2、指向一维数组的指针 int array[] = {0,2,4,6,8}; int *pArray ;//指针 pArray = array;//指向首地址,数组名就是数组的首地址,也可以写array[0] show(pArray,sizeof(array)/sizeof(int));//输出数组,使用指针传参数 //*(++pArray); 和 *(pArray+2);的区别,数组指针的p++,p+2 是指指针向下一个元素的首地址 int nElement1 = * ++pArray;//2 pArray = array;//恢复原值 int nElement2 = *(++pArray);//2 pArray = array;//恢复原值 int nElement3 = *(pArray+2);//4 printf("*pArray++:%d \n*(pArray++):%d\n*(pArray+2):%d\n",nElement1,nElement2,nElement3); return 0; } void show(int *array,int n ) { //遍历数组 printf("数组元素:\n"); for (int i = 0 ; i < n; i ++) { printf("%d ",array[i]); } printf("\n"); }
指针和字符串
1、字符串变量,可修改char str[] = "hello";
2、字符串常量,不可更改
char *p = "world";
代码示例
#include <stdio.h> //指针和字符串 /* 1、字符串变量,可修改 char str[] = "hello"; 2、字符串常量,不可更改 char *p = "world"; */ int main() { //字符数组,元素可以自由更改.字符串变量 char str[] = "hello"; char *pstr1 = str;//定义指针指向字符串 printf("%s\n",str); printf("%c\n",*(3+pstr1)); //字符串指针,这使用和str[]有本质区别,pstr2指向的字符串不能更改,是一个字符串常量 char *pstr2 = "world"; char *pstr3 = "world";//pstr3和pstr2指向同一块内存地址 *pstr2 = 'A'; printf("%s\n",pstr2); printf("%c\n",*++pstr2); return 0; }
函数指针和指针函数
1、返回指针的函数,就以普通函数,只不过返回值是一个指针类型名 *函数名(参数列表);
2、函数指针,指向函数地址的指针,是一个指针,而不是函数,指向函数的首地址
返回值类型 (*指针变量名)(参数列表);
函数指针的两种使用方式:
1、 p();
2、 (*p)();
函数指针的主要用途:
1、调用函数
2、讲函数作为参数再函数间传递
#include <stdio.h> //返回指针的函数 /* 1、返回指针的函数 类型名 *函数名(参数列表); 2、函数指针,指向函数地址的指针 返回值类型 (*指针变量名)(参数列表); 两种使用方式: 1、 p(); 2、 (*p)(); */ char* pFunc();//指针函数 int (*pf)(int ,int );//函数指针 int Function(int ,int);//普通函数 int main() { int a = 10; int b = 5; int c = 0; pf = &Function;//将函数指针指向具体的函数,这是pf就相当于函数本身,不过使用更灵活 printf("%d\n",pf(a,b));//第一种引用方式 printf("%d\n",(*pf)(a,b));//第二种引用方式 char *addr = pFunc();//获取函数的返回值,是一个地址值 printf("%s\n",addr);// return 0; } //指针函数定义 char* pFunc() { char *name = "song"; return name; } int Function(int a,int b)//普通函数 { return a+b; }
2015-4-12 今日如此,明日依旧。
相关文章推荐
- iOS开发学习笔记 2-4 C语言部分 指针
- iOS开发学习笔记 2-4 C语言部分 指针
- iOS开发学习笔记 2-9 C语言部分 内存分配函数 函数指针 指针函数 void*
- iOS开发学习笔记 2-9 C语言部分 内存分配函数 函数指针 指针函数 void*
- iPhone开发学习笔记006—— NSNotification自定义通知名
- IOS开发之MapKit学习笔记
- ((ios开发学习笔记 十一))自定义TableViewCell 的方式实现自定义TableView(带源码)
- IOS开发基础教程学习笔记2 DatePicker获取时间
- iOS开发学习笔记——UITableview
- ((ios开发学习笔记五))手动创建Tab Bar Controller 程序
- ((ios开发学习笔记 十二))Nib加载的方式实现自定义TableView
- ((ios开发学习笔记八)) 多组选择器实现 PickerView
- ios开发学习笔记(这里一定有你想要的东西,全部免费
- iOS开发之学习笔记-基础篇(一) IPhone URL Schemes
- ((ios开发学习笔记 十三))实现九宫格效果(附带源码)
- ios 开发学习笔记(一)
- IOS开发学习笔记(1)-----UILabel 详解(原创)
- 开始学习 IOS 开发,记录学习笔记。
- iOS开发学习笔记一
- IOS开发基础教程学习笔记3 使用Tab Bar切换视图