IOS成长中 C语言之指针一
2014-08-06 08:58
267 查看
知识点概括:
1.指针变量
2.指针与数组
3.指针与字符串
数据的存储
字节是最小的存储单元,一个字节称为一个存储单元(内存单元),不同数据类型所占用的存储单元不等。为了正确访问内存单元,每个内存单元都有一个编号。内存单元的编号称作地址。
内存单元中的内容才是我们关注的数据
数据的访问方式
数据访问一般分为直接访问和间接访问。直接访问:直接访问内存单元中的内容。例如: a = 20; b = 2 * a等
间接访问:通过内存单元编号以及数据所占字节数访问内存中数据。
间接访问在程序中随处可见,指针是间接访问的常用方式
//定义一个整形变量 // int a = 10; // //定义一个指针变量,和定义整型变量类似,也是包含三部分:数据类型 变量名 = 初值 // //只不过指针变量用来存储地址而已 // //int *指针变量类型,p指针变量名,NULL指针变量初值 // //int 的作用:(1)当自增时增加几个字节大小,(2)当存取数据时,一次性读取几个字节 // //定义时,* 告诉编译器,后面的变量是一个指针变量,用来存地址的 // int *p = NULL; // //指向关系 // p = &a; //将a的地址赋值给p // printf("%d\n", a); //直接访问 内存单元数据 // // *p, 此时的作用根据指针变量存储的地址,找到对应的内存单元,将内存单元上的数据调取出来 // printf("%d\n", *p); //间接访问 // //对于指针变量类型,所规定的存储空间的大小只和操作系统的位数有关,32位操作系统是4个字节,64位操作系统是8个字节 // printf("%lu\n", sizeof(float *)); // *p = 20; // printf("%d\n", *p); // int a = 15; // //赋值为NULL,让指针变量c指向一个无效的空间 // int *p1 = NULL; // //当对c指向的空间进行操作时,c必须指向一个有效的空间(明确的空间) // p1 = &a; // *p1 = 30; // int **b = &p1; // printf("%d\n", *p1); // printf("%d\n", **b); // int c = 41; // p1 = &c; // printf("%d\n", *p1); // int d = 1, e = 5, f = 6; // p1 = &d; // p1 = &e; // p1 = &f; // p1 = &c; // //指针变量的重新赋值,叫做指针重指向,我们就看操作之前指针最后一次的指向即可 // printf("%d\n", *p1); // int a[5] = {10, 41, 52, 33, 24}; // int *p = NULL; //让p指向数组的首地址(数组名a就代表数组的首地址,第一个元素的地址) // p = a; // p = &a[2]; // *(p + 2) = 60; // printf("%d\n", *(p + 2)); // printf("%d\n", *p); // p++; //p = p + 1 // printf("%d\n", *(p + 4)); //当把数组的首地址赋给指针变量p之后,指针变量就可以当做数组名来使用 //数组名是一个常量,不可对其更改 // for (int i = 0; i < 5; i++) { // printf("%d\n", p[i]); // printf("%d\n", *(p++)); // printf("%d\n", *(a + i)); // } //1.给数组元素赋值 // int a[5] = {0}; // int *p = NULL; // p = a; // for (int i = 0; i < 5; i++) { // *(p++) = arc4random() % 21 + 20; // } // p = &a[0]; // 经过5次自增 p的值已不是a[5]数组的首地址,要重置一次 // //2.对数组进行升序排序 // for (int i = 0; i < 4; i++) { // for (int j = 0; j < 4 - i; j++) { // if (*(p + j) > *(p + j + 1)) { // int temp = *(p + j); // *(p + j) = *(p + j + 1); // *(p + j + 1) = temp; // } // } // } // //3.输出数组中元素 // for (int i = 0; i < 5; i++) { // printf("%d ", *(p++)); // } // assignArr(a, 5); // sortArr(a, 5); // outputArr(a, 5); // short a[4] = {3, 1, 2, 1}; // int *p1 = a; // char *p2 = a; // printf("%d %d", *(p1 + 1), *p2); //指针与字符串 // char temp[20] = "android"; // char *p = NULL; // p = temp; // *(p + 8) = 'a'; // printf("%s\n", temp + 5); // printf("%c\n", *(p + 5)); // //求字符串长度 // int i = 0; //循环变量初始化(initialization) // int length = 0; //用来存储字符串的字符的个数 // //condition // while (*(p + i) != '\0') { // length++; //statements // i++; //循环变量增量(increment) // } // printf("%d", length); //指针数组(数组中的每一个元素都是一个指针变量) // char str = "Frank"; // char *a[3] = {"Frank", "Duck", "iPhone"}; /* * 字符数组str 需要存储字符,所以把常量区中Frank字符串的内容拷贝到数组中, 而对于数组a来说,数组中的每一个元素都是一个字符型的指针变量,指针变量用来存储地址, 所以将常量区中的Frank,Duck,iPhone的开始地址拷贝到对应的变量中,通过指针操作操作的时常量区的内容 */ //常量区中的内容不可更改 // printf("%s", a[2]);
相关文章推荐
- IOS成长中 C语言之函数指针
- IOS成长中 C语言之指针二
- IOS成长中 C语言之循环语句
- IOS成长中-C语言-数据类型(第一天)
- IOS开发---C语言-⑪指针
- 【学习ios之路:C语言】①指针及其简单的应用
- 黑马程序员之IOS学习总结——05 C语言中的指针
- iOS开发学习笔记 2-4 C语言部分 指针
- C语言中 字符、数组、字符串、指针——学习IOS你必须了解
- IOS开发之路--C语言指针
- IOS-C语言第9天,Pointer(指针)
- IOS开发系列--C语言之指针
- IOS成长中 C语言之数组二
- iOS开发学习笔记 2-9 C语言部分 内存分配函数 函数指针 指针函数 void*
- IOS学习---C语言基础学习7(指针)
- IOS成长中 C语言之数据类型
- IOS成长中 C语言之分支结构
- iOS开发系列--C语言之指针
- IOS开发---C语言-⑬函数与指针
- IOS-C语言第10天,PointerPro(高级指针)