void pointer c语言,C语言-Pointer

//main.m

#import

#import "Array.h"

#import "Change.h"

int main(int argc, const char * argv[])

{

//定义指针变量

// int a = 10;

// float b = 5.0;

// char c = 'a';

// a = 20;

// printf("%d\n",a);

//

// int *p = NULL;

// //定义了一个数据类型为 int* 变量名为 p 初始值为 NULL 的一个指针变量

// //指针变量是一个存储了地址的变量

// //int * 为数据类型;

// //int 指的是 p 需要指向一个整型的变量(存储的是整型变量的地址);

// // * 是告知变量 p 是一个指针;

// // NULL 指的是一个无效的地址空间,赋初值;

// //指针变量的存储空间大小和系统有关,64位系统下是8个字节;

//

// printf("%lu %lu",sizeof(int *),sizeof(p));

// //指向浮点型的地址

// float *p_1 = NULL;

// printf("%lu %lu",sizeof(float *),sizeof(p_1));

// //指向字符型的地址

// char *p_2 = NULL;

// printf("%lu %lu",sizeof(char *),sizeof(p_2));

//

// & : 取地址符

// p = &a; //将 a 的地址赋值给 p, 那么 p 指向 a

// p_1 = &b; //将b 的地址赋值给 p_1 ,那么p 指向 b

//

// printf("\np = %p, a的地址%p",p,&a); //打印后 p 等于 a 的地址

//

// // * : 取值符 (获取对应地址的值,当然也可以对对应地址内存赋值)

// // 关于取值还是赋值 根据"="来判定,,=左赋值

// printf("\n a = %d , *p = %d",a ,*p);

// *p = 40;

// printf("\n%d",a);

//

// //*(&a) * 和 & 是一对相反互逆的过程符号

// printf("a = %d",*(&a));

//

//指针变量的算术运算

// int a = 1;

// int *p = &a;

// printf("p = %p\n",p);

// //对指针一次性改变的增量跟指向的数据类型有关,比如 int 一次 4个字节

// p++;

// printf("p = %p\n",p);

//

//

// char c = 'a';

// char *p_1 = &c;

// printf("p_1 = %p\n",p_1);

// p_1++;

// printf("p_1 = %p\n",p_1);

// p_1 = p_1 - 2;

// printf("p_1 = %p\n",p_1);

// p = p - 2;

// printf("p = %p",p);

//

//重指向

// int num = 0;

// p = #

//

//指针与数组

// int a[5] = {1,2,3,4,5};

// int *p =NULL;

//

// printf("a = %p,&a[0] = %p\n",a,&a[0]);

// p = a; //因为数组名代表数组的首地址,我们将a 赋值给 p 就是将数组的首地址给 p,p 就指向数组 a

//

// //访问数组第2个元素

// a[1];

// *(p + 1);

// *(a + 1);

// p[1]; //如果指针变量指向数组,那么指针变量可以当做数组名来使用.

// printf("%d,%d,%d",a[1],*(p+1),*(a+ 1),p[1]);

// // a[1] 与 1[a] 同样表示

// // a[1] == *(a + 1) == *(1 + a) ==1[a]

//

//

//

// //使用指针变量 p 对数组 a 进行遍历输出

// for (int i = 0; i < 5; i++) {

// printf("%d ",*(p + i)); //或者 *(p + i) 替换成 p[i].

// }

//

// //使用指针变量进行冒泡排序

//

// for (int i = 0; i < 5 - 1 ; i++) {

// for (int j = 0; j < 5 - 1 -i; j++) {

// if (*(p + j) > *(p + j + 1)) {

//

// int o = *(p + j);

// *(p + j) = *(p + j + 1);

// p[j + 1] = o;

// }

// }

//

//

// }

//

// for (int i = 0; i < 5; i++) {

// printf("%d ",p[i]);

// }

//

//

//

//指针和数组的区别

// int a[5] = {1,2,3,4,5};

// int *p =NULL;

//

// //内存大小

// //数组的内存大小 = 每个元素内存大小 * 数组元素个数

// //指针内存大小只和操作系统有关,跟指向的数据类型无关

// p = a;

// printf("a size = %lu , p size = %lu",sizeof(a),sizeof(p));// 20 , 8

//

// //赋值

// //指针变量是一个变量,可以重新赋值

// //数组名,是一个常量,表示第一个元素,不可以赋值

// int b[10] = {0};

// p = b;

// //a = b; 是错误的

//

// short c[5] = {2,3,4,5};

// int *p_1 =NULL;

// short *p_2 = NULL;

// char *p_3 = NULL;

//

// //指针变量存储的变量地址的数据类型一定要匹配,

// p_1 = c;

// p_2 = c;

// p_3 = c;

// printf("\np_1[0] = %d,p_2[0] = %d,p_3[0] = %d",*p_1,*p_2,*p_3);

//指针和字符串的关系

// char ch[20] = "iphone6";

// char *p = ch; //p 指向 ch数组

//

// for (int i = 0; i < 20 ; i++) {

// printf("%c ",*(p+i));

// }

// printf("\n%s",p);

//

// printf("%d ",myStrlen(p));

//

//

//

//指针数组

// char ch_1[20] ="iOS";

// char ch_2[20] ="C++";

// char ch_3[20] = "C++++";

// char ch_4[20] = "java";

//

// char *ch[4] = {ch_1,ch_2,ch_3,ch_4};

//

// //遍历指针数组

// for (int i = 0; i < 4; i++) {

// printf("%s ",ch[i]);

// }

//

//

//

// char *p_1 = "iOS";

// char *P_2 = "C++";

// char *p_3 = "C++++";

// char *p_4 = "java";

//

//

//

//

// strcpy(p_1, "aa");//其实在这个时候 p 直接指向常量区的字符串或者数字,是不可以改变的

// //如果在上面 式子中,先把"iOS"给了数组,数组内容中的"iOS"是从常量中拷贝而来的,所以如果去改变指向变量的话,可以做到

// char a[80]="jasdofiewofnaidshadfkjagoiasdfewnjfsdioucasmfbh";

// char *p_5 ="jasdofiewofnaidshadfkjagoiasdfewnjfsdioucasmfbh";

// //以上两个用法是都可以实现的,因为 p_5指向的是这个字符串,完全不用考虑因数组越界的问题了.

//

//指针函数

// int a = 5;

//

//

// changenum(a);

// printf("a = %d",a);

//

// changenumber(&a);

// printf("a = %d",a);

//

//

return 0;

}

//  Change.h/Change.m

Change.h

#import

void changenum(int a);

//void changenumber(int *a);

Change.m

#import "Change.h"

void changenum(int a){

a += 10;

}

//void changenumber(int *a){

// *a += 10;

//}

//

//Array.h/Array.m

#import

//求长度

int myStrlen(char *p);

#import "Array.h"

//求长度

int myStrlen(char *p){

//计数器

int count = 0;

int i = 0;

while (*(p + i) != '\n') {

count++;

i++;

}

return count;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值