一:
// main.m
// LessonPointer9
//
// Created by lanouhn on 15/4/30.
// Copyright (c) 2015年 lanouhn. All rights reserved.
//
#import
//void swap(int a,int b);
//void swap(int a,int b){
// int temp=a;
// a=b;
// b=temp;
//}
//如果想要在函数内部修改外部变量时,函数的参数使用指针变量
//void swapPro(int *p1,int *p2);
//void swapPro(int *p1,int *p2){
// int temp = *p1;
// *p1 = *p2;
// *p2 = temp;
//}
//void printArray(int *array,int count);
//void printArray(int *array,int count){
// for (int i=0; i
// printf("%d",array[i]);
// }printf("\n");
// }
//void bubbleSort(int *array,int count);
int main(int argc, const char * argv[]) {
//指针:内存的地址编号(类似于房间的门牌号)
//
// int a=10,b=5;
// int *p1=&a;
// int *p2=&b;
// //当指针变量被重新赋值,意味着指针重指向
// p1=p2;
// printf("%d\n",*p1);
//
//
// int a =15,b=10;
// int *x=&a;
// int *y=&b;
// *x=11;
// int *p=&a;
// p=y;
// *y = 8;
// printf("%d,%d\n",a,b);
// int a=6,b=8,c=10;
// int *x=&a;
// x=&c;
// int *y=&b;
// int *z=&c;
// *z=5;
// *x=12;
// x=y;
// *y=*x+* z;
// printf("%d,%d,%d\n",a,b,c);
//
//指针常见的问题
//1.内存地址编号比较低的存储单元,有操作系统控制,不允许访问
// int *p=NULL;//0x0
// *p = 100;
//2.野指针,定义指针变量没有赋初值
// int *p;
// *p = 100;
//3.指针变量定义时,*怎么写
// int *p1 = NULL;//推荐
// int* p2 = NULL;
// int * p3 = NULL;
// int*p4 = NULL;
//
//4.指针变量所占的字节数
//a.与数据类型无关
//b.与操作系统的位数相关,64位操作系统指针变量占8个字节,32位操作系统占4个字节
// int *p = NULL;
// printf("%lu\n",sizeof(p));
// printf("%lu\n",sizeof(int *));
// printf("%lu\n",sizeof(char *));
// printf("%lu\n",sizeof(short *));
// printf("%lu\n",sizeof(long *));
//
//5.定义指针变量的数据类型有什么用途?
//a.指针变量的数据类型,决定了用*(取值操作)取多少个字节的内容
// int a=260;
// short *p=&a;
// printf("%d\n",*p);
//
//b.指针变量的数据类型,决定了指针变量做+1操作时,跳转多少个字节
// int *p=NULL;
// printf("%p\n",p);//0x0,0x0
// printf("%p\n",p+1);//0x4,0x4
//
// printf("%p\n",++p);//0x4,0x4
// printf("%p\n",p);//0x4,0x4
//
// printf("%p\n",p++);//0x4,0x8
// printf("%p\n",p);//0x8,0x8
//p+1
//p++
//相同:取到的都是下一个字节的地址
//不同:++p或p++,修改了p的值,会让指针重定向
//指针在数组中的使用
//数组在内存中是连续存储的
int array[5] = {1, 2, 3, 4, 5};
for (int i=0; i<<span se-mark="1">5; i++) {
printf("%p\n",&array[i]);
}
//数组的名字,就是数组的首地址
//array 恒等于 &array[0]
printf("%p\n",&array[0]);
printf("%p\n",array);
int *p=array;
printf("%d\n",*p);
printf("%d\n",*array);
printf("%d\n",*(p+1));
printf("%d\n",*(array+1));
printf("%d\n",array[1]);
printf("%d\n",p[1]);//xiangdeng
// printf("%d\n",*(p+1));
printf("%d\n",*(array+1));
// //array[i] 等于 *(array+i)
// printf("%d\n",p[4]);
// printf("%d\n",*(p+4));
// printf("%d\n",*(4+p));
// printf("%d\n",4[p]);
//
// printf("%d\n",array[4]);
// printf("%d\n",*(array+4));
// printf("%d\n",*(4+array));
// printf("%d\n",4[array]);
//a[i]=*(a+i)
// 有10个元素的数组,随机赋值,取值范围[22,33]
// int array[10]={0};
// int *p=array;
// for (int i=0; i<10; i++) {
// *(p+i) = arc4random()%(32-22+1)+22;
// printf("%d ",*(p+i));
// }
//
// printf("\n");
//冒泡排序
// BOOL flag=YES;
// for (int i=0; i<10-1&&flag; i++) {
// flag=NO;
// for (int j=0; j<10-1-i; j++) {
// if (*(p+j)>*(p+j+1)) {
// int temp=*(p+j);
// *(p+j)=*(p+j+1);
// *(p+j+1)=temp;
// flag =YES;
//
// }
// }
//
// }
// for (int i=0; i<10; i++) {
// printf("%d ",*(p+i));
// }
//
// int array1[10]={0};
// int *p1=array1;
//数组名(数组首地址)与指向数组首地址的指针变量的区别
//1.数组名(数组首地址)是一个常量地址,不能够修改
// int a=10;
// aarray=&a;//buyunxu
//2.sizeof(),如果是数组名(数组首地址),计算的是数组所占的字节数;如果是指针变量,计算的是指针变量所占的字节数
// printf("%lu\n",sizeof(array1));//40
// printf("%lu\n",sizeof(p1));//8
// 指针与字符串
// char string[]="iphone";
printf("%s\n",string);//iphone
printf("%s\n",string+3);//one
// printf("%c\n",string[2]);//h
// printf("%c\n",*(string+2));//h
// char string[] = "I Love you";
// *(string +1)='\0';
// *(string +7)='\0';
// printf("%s\n",string);
// printf("%s\n",string+3);
// printf("%s\n",string+7);
// printf("%s\n",string+8);
//通过指针可以计算字符串的长度
// char str[]="Do one thing at a time, and do well!";//一次只做一件事,做到最好
// int i=0;
// while (*(str+i)!='\0') {
// i++;
// }
// printf("长度:%d\n",i);
// int n=10,m=5;
//
// swap(n,m );
// printf("%d %d",n,m);
// printf("\n");
//
//
// swapPro(&n, &m);
// printf("%d %d\n",n,m);
//
int a=0;;
a=(int)((double)(3/2)+0.5+(int)1.99*2);
printf("%d\n",a);
return 0;
}