//
// main.m
// C8-指针
//
// Created by dllo on 15/10/15.
// Copyright (c) 2015年 dllo. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "student.h"
//指针作为数组参数
//void test(int *p)
//{
// printf("%d ", *p);
// *p = 5;
//}
//冒泡排序指针实现
//void maopao(int *k, int count)
//{
// for (int i = 0; i< count - 1; i++) {
// for (int l = 0; l < count - 1 - i; l++) {
// if (*(k + l) > *(k + l + 1)) {
// int b = k[l];
// k[l] = *(k + l + 1);
// *(k + l + 1) = b;
// }
// }
// }
//}
//
int main(int argc, const char * argv[]) {
//
//
// int a = 0;
// printf("%d ",a);
// printf("%p ",&a);
//
//定义一个指针类型的变量
//变量类型 变量名 初值
// int *p = NULL;
//指针基础使用最重要的两个符号: * &
// * - 取值运算符
//& - 取址运算符
// int a = 5;
//通过指针访问
//指针指向空间 - 本质就是指针的空间存了a的地址值
// p = &a;
//通过指针访问所指向空间中的元素值
// printf("%d", *p);
//练习
// float a = 4.5;
// float *b = NULL;
// b = &a;
// printf("%f ",*b);
//
////
// int a = 5;
// int b = 7;
// int *p1 = NULL;
// int *p2 = 0;
// p1 = &a;
// p2 = &b;
//
// int c = 0;
// int *temp = NULL;
// temp = &c;
// *temp = *p1;
// *p1 = *p2;
// *p2 = *temp;
//
// printf("%d %d",*p1,*p2);
// printf("%d %d",a , b);
//
// int a = 0;
// int b = 0;
// int c = 0;
// scanf("%d%d%d",&a, &b, &c);
// int *p1 = NULL;
// int *p2 = NULL;
// int *p3 = NULL;
// p1 = &a;
// p1 = &b;
// p1 = &c;
// int max = *p1 > *p2 ? * p1 : *p2;
// max = max > *p3 ? max : *p3;
//
// int a = 0;
// int b = a;
// printf("b1= %d",b);
// scanf("%d",&a);
// printf("b2= %d",b);
//
//
// int a = 0;
// int *p1 = NULL;
// p1 = &a;
// printf("p1= %d",*p1);
// scanf("%d",&a);
// printf("p2= %d",*p1);
//定义和使用在一起,int *p = &a;
//指针的加减就是位移
// int *p1 = NULL;
// char *p2 = NULL;
// printf("%ld ",sizeof(p1));
// printf("%ld ",sizeof(p2));
//指针是用来存地址的,为了保证能够存下最大的地址.系统有自己的位宽64位或者32位,硬件也有自己的位宽64位或者32位,指针的大小跟系统有关,跟硬件无关
//在同一个系统中,不同类型的指针占内存大小相同,64位下都占8个字节
//不同类型的指针的意义
//1 *p所见范围不同
//2,p++移动大小不同
// int a = 256;
// char *p = &a;
// p++;
// printf("%d ",*p);
//指针和数组的关系
// int a[5] = {1, 2, 3, 4, 5};
// int *p = NULL;
//
//指针指向数组首地址
// p = a;
// p = &a[0];
//指向数组中的其他元素
// p++;
// printf("%d ", *p);
//
// printf("%d ",p[1]);
// printf("%d ", *(p + 1));
// printf("%d ",*(a + 1));
//
//
//记住2个本质,第一个语法糖(数组本不存在,a[4]实际上是一个首地址加上4个偏移量),c语言中所有的操作都是通过地址操作来实现的
//第二个 变量,是地址所指向的空间.
//数组名字是常量不可以改变
//练习通过指针对数组进行冒泡排序
// int a[5] = {54, 34, 65, 434, 67};
// int *p = a;
// for (int i = 0; i < 5 - 1; i++) {
// for (int j = 0; j < 5 - i - 1; j++) {
// if (*(a + j) > *(p + j + 1)) {
// int b =*(p + j);
// *(p + j)= *(p + 1 + j);
// *(p + 1 + j) = b;
// }
// }
// }
// for (int i =0; i < 5; i++) {
// printf("%d ",*(p + i) );
// }
//通过指针可以计算字符串的长度
//编程实现
// char b[6] = "yuhao";
// char *p1 = b;
// int count = 0;
//遇到' '退出循环
// while (*p1 != ' ') {
// count++;
//计数加1
// p1++;
//指针移动访问后一个元素
// }
// printf("%d ",count);
//
//
// int a = 6;
// test(&a);
// printf("%d",a);
// int a[5] = {1,34,55,64,432};
// maopao(a, 5);
// for (int i = 0 ; i < 5; i++) {
// printf("%d ",a[i]);
// }
//指针数组
// int * p[2000] = {NULL};
//
//昨天的限时代码
// student stu[6] = {
// {"yuhafo", "female", 22, 99},
// {"yuhfsao", "female", 22, 98},
// {"lijin", "man", 23, 94},
// {"wangqi", "man", 24, 93},
// {"sunyunpu", "man", 23, 99},
// {"zhouyou", "man", 34, 99}
// };
// pointstrarray(stu, 6);
// sortstrarray(stu, 6);
// pointstrarray(stu, 6);
// 1. (**)编写一个函数,交换2个浮点数。
//
// 1. (***)在主函数中输入6个字符串(二维数组),对他们按从小到大的顺序,然后输出这6个已经排好序的字符串。要求使用指针数组进行处理。
//
// 2. (****)面试题:
// 有一字符串中包含数字与字符,请编程去除数字
//
//
//
// float a = 5.8;
//
//
// float b = 8.0;
//
// change(&a, &b);
//
// char arr1[] = "yuhadjad2312jlsdhasdl";
//
//
// removenumber(arr1);
// char arr1[30] = "aaasfff";
// char arr2[10] = "afa";
// copystrcat(arr1, arr2);
//printf("%s",arr1);
// copystrcmp(arr1,arr2);
// copystrcpy(arr1, arr2, 30);
return 0;
}