小小君的C语言第八课
来源:互联网 发布:网络研修教学反思 编辑:程序博客网 时间:2024/05/21 17:22
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc,const char * argv[]) {
// 限时代码
// Student stu1 = {"dajun", "女", 111, 99};
// Student stu2 = {"mtt", "女", 666, 89};
// Student stu3 = {"cqq", "女", 333, 76};
// Student stu4 = {"zp", "男", 222, 66};
// Student stu5 = {"aa", "女", 555, 73};
// Student stu[5] = {stu1, stu2, stu3,stu4,stu5};
// for (int i = 0; i < 5; i++) {
// printfStudent(stu[i]);
// }
// printf("\n");
// sortStudentForNumber(stu, 5);
// for (int i = 0; i < 5; i++) {
// printfStudent(stu[i]);
// }
//字节是内存中最小的存储单位
// 1个字节是8个二进制位
// 访问变量
// 1.直接访问 :通过变量名直接访问
// 2.间接访问 :通过变量的地址(内存编号)访问变量
//指针变量 :保存的是地址
// int *p = NULL;
//声明指针变量的时候 * 没有特殊意义只是告诉编译器 这是一个指针变量
// int表示这个指针变量所指向的内存区域是一个整型存储区域也就是说 指针变量p指向的内存区域里面储存的值是一个整型
int a = 5;
//声明一个指针变量
int *p = NULL;
// 指针变量p 指向 a的存储区域(地址)
// &a 取出变量a的地址
p = &a;
// 打印地址的占位符 %p
printf("%p\n", p);
printf("%p\n", &a);
// * 取值符
// *p表示指针变量p 所指向地址里面 保存的值
printf("%d\n", a);
// 通过指针变量p 来打印
printf("%d\n", *p);
// 修改变量a的值
a =3; // 直接访问
*p =30; // 间接访问
printf("%d\n", *p);
//打印指针变量占用字节数
//指针变量 占用8个字节不管你是什么数据类型,只跟操作系统有关系
printf("%lu\n",sizeof(p));
//指针变量的赋值 相当于指针的重指向
int b = 3;
p = &b;
printf("%d\n", *p);
int num1 = 50;
int num2 = 40;
int *p1 = &num1;
int *p2 = &num2;
p2 = p1;
*p2 =100;
printf("%d\n",num1);
printf("%d\n",num2);
printf("%p\n",p1);
printf("%p\n",p2);
printf("%d\n",*p1);
printf("%d\n",*p2);
// 指针的运算
//地址里面的值 可以加减乘除
// 地址运算 只有 加 减
//地址 + 1 要看指针变量的数据类型
// 如果 int 类型 地址 + 1 相当于 加4个字节
// 如果 char 类型 地址 + 1 相当于 加1个字节
*p =3;
printf("%p\n",p);
p++;
printf("%p\n",p);
int c = 3;
int d = 5;
p = &c;
//系统在分配变量的内存时 不一定分配的是连续的
//数组在分配内存时 肯定分配是连续的内存区域
printf("&a = %p\n", &c);
printf("&b = %p\n", &d);
printf("%d\n", *p);
p--; // 地址 - 4
printf("%d\n", *p);
//需求是:通过指针编写一个函数 通过指针交换两个整型变量的值
a =1;
b =2;
//参数的传递 是实参向形参进行的传递是一个拷贝的过程 是一个值的传递地址是不一样的
//交换时本着一个原则 操作的变量的地址应该是一致的
changeValue(&a, &b);
printf("a = %d b = %d\n",a, b);
// 指针与数组
int array[4] = {1,3, 5, 7};
printf("%p\n",&array[0]);
printf("%p\n",array);
//申明一个指针变量 指向数组(数组的首元素)
//数组名字本身就是数组首元素的地址 不需要加取地址符了
p = array;
printf("*p = %d\n",*p);
printf("*(p + 1)= %d\n",*(p +1));
printf("%d\n",p[2]);
//取出数组中元素的方法
// array[下标]
// *(array + 下标)
//利用指针变量p取出数组元素
// p[下标]
// *(p + 下标)
//计算数组中元素的个数
//数组中总的元素个数 / 数组中单个元素的字节数= 数组元素个数
int count = sizeof(array) /sizeof(array[0]);
printf("count = %d\n",count);
// array 代表整个数组
// p代表指针变量
//需求:通过指针变量p 能不能求出来元素个数 ---不能
//指针变量占8字节只跟操作系统有关
//通过指针变量不能求出数组元素的个数
count =sizeof(p) / sizeof(*p);
printf("count2 = %d\n",count);
//数组当函数参数时 传递的不是整个数组
//传递的时数组元素的首地址(就是传递了一个指针)
short arr[4] = {6 ,3 , 9 , 1};
int *p4 = arr;
printf("%d\n",*p4);
char *p3 = arr;
printf("%d\n",*p3);
// 指针与字符串
// 常量字符串 “iphone”
char str1[] = "iphone";
//把常量区的常量字符串 拷贝一份给到栈区
char str2[] = {'i','p', 'h', 'o', 'n', 'e'};
char *pp = str1;
// 1.利用指针打印字符串
printf("%s\n",str1);
printf("%s\n", pp);
// 2.利用指针打印字符 h
printf("%c\n",str1[2]);
printf("%c\n", pp[2]);
printf("%c\n", *(pp +2));
printf("%c\n", *(str1 +2));
// 3.把h更改成 w
str1[2] ='w';
printf("%c\n",str1[2]);
*(pp +2) = 'l';
printf("%c\n", *(pp +2));
// 4.通过指针可以计算字符串的长度
// 思路: 第0位 *(p + 0)
// 第1位 *(p + 1)
// 第3位 *( p + 3)
// *(p + i) = '\0'
int cc = 0;
while (*(pp + cc) != '\0') {
cc++;
}
printf("%d\n", cc);
// 输出全部字符串
char *strings[3] = {"iOS", "Android","Win8"};
//指针数组 数组中保存的都是同一个类型的数据指针数组中保存的都是指针类型 保存的都是地址
printf("%s\n",strings[0]);
printf("%s\n", *strings);
printf("%s\n",*(strings +1));
// strings[0] = "SOS";
// printf("%s\n",strings[0]);
printf("%c\n", *strings[1]);
return 0;
}
Student.h文件:
void changeValue(int *num1 ,int *num2);
Student.m文件:
void changeValue(int *num1 ,int *num2){
int c = *num1;
*num1 = *num2;
*num2 = c;
}
- 小小君的C语言第八课
- 小小君的C语言第一课
- 小小君的C语言第二课
- 小小君的C语言第三课
- 小小君的C语言第四课
- 小小君的C语言第五课
- 小小君的C语言第六课
- 小小君的C语言第七课
- 小小君的C语言第九课
- 小小君的C语言第十课
- 小小君的C语言第十一课
- C语言第八课
- C语言第八课
- C语言之第八课:C语言的字符串常量
- 我的小小成果 C语言
- C语言第八课 预处理
- 一个小小的C语言宏定义错误 - [C,C++]
- c语言学习小小体会
- 限制网页仅可在微信客户端打开
- MFC(二) 窗口创建机制编故事(上)
- 入职第一天------->新手
- 1015. Reversible Primes
- 时间戳转化为日期如yyyy-MM-dd
- 小小君的C语言第八课
- 面试遇到的JS编程题
- 关于meta标签的几个常见作用
- ViewPager和Fragment的结合
- windows下Qt编译Qtxlsx库和qtxlsx库的使用方法
- 快速熟悉项目代码
- iOS之UI基础---frame和bounds的区别
- 文件上传
- Android功能之第三方Pull-to-Refresh.Rentals-Android下拉刷新