#import
void swap(int x, int y);
void swap(int x, int y) {
printf("x = %d, y = %d\n",x, y);
int temp = x;
x = y;
y = temp;
printf("x = %d, y = %d\n",x, y);
}
void swap1(int *x, int *y);
void swap1(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
int main(int argc, const char * argv[]) {
int a = 20, b = 10;
printf("-----a = %p, b = %p\n",&a, &b);
// swap(a, b);
// printf("a = %d, b = %d\n",a, b);
swap1(&a, &b);
printf("a = %d, b = %d\n",a, b);
printf("+++++a = %p, b = %p\n",&a, &b);
/*
//指针 指针变量,也是一个变量。TA存储的是地址!!!也就是内存编号。
//指针变量在C语言中通常用 p、q、r来表示
//不管指针变量是什么类型(字符型指针、整型指针、浮点型指针),存放的内容(地址、内存编号)都是相对应变量内存的首地址!!!
//指针变量p的数据类型为 int *,代表的是p是一个整型指针。
int *p = NULL;
int a = 10;
a = 20;
int b = 30;
//C语言中的取地址符 为 &。
p = &a;
printf("*p is %d\n",*p);
p = &b;
printf("*p is %d\n",*p);
printf("%d\n",a);//直接访问a存储的值
//C语言中的取值符 为 *
printf("%d\n",*p);//通过指针变量访问 称为间接访问
*/
/**
* * 在 指针模块中需要特别注意
1、当* 出现在 声明指针变量时,仅仅代表修饰符,说明声明的变量是一个指针变量 int *p = NULL;
2、当* 单独拿出来与指针变量结合使用时,代表取值!将指针变量指向的变量中保存的值取出来!*p
*/
/*
char c = '1';
char *q = &c;
//不管是什么类型的指针变量,存放的都是首地址,就一个内存编号。指针变量的内存大小,只与操作系统有关!!!
printf("p is %lu,q is %lu\n",sizeof(p), sizeof(q));
//打印指针变量采用%p来占位
printf("%p\n",p);
*/
/*
int a = 20, b = 10;
int *p = &a;
printf("指针变量p所占内存空间为%lu, 指针变量p存储的内容为%p, 指针变量指向的变量中存储的值为%d\n",sizeof(p), p, *p);
//重指向
p = &b;
printf("指针变量p所占内存空间为%lu, 指针变量p存储的内容为%p, 指针变量指向的变量中存储的值为%d\n",sizeof(p), p, *p);
*/
//指针的算数运算,指针算数运算只有加减,没有乘除。
/*
int a = 20, b = 10;
int *p = &b;
printf("---%d %p\n",*p, p);
printf("%d\n",*(p + 1));
printf("+++%d %p %p\n",*p, p, &a);
*/
/*
int a = 20;
printf("a = %p\n",&a);
int *p = &a;
printf("%lu,p = %p\n",sizeof(p), &p);
int b = 10;
p = &b;
printf("b = %p\n",&b);
*/
/*
//指针与数组,数组是不能直接赋值的,数组如果直接赋值,相当于改变了数组的首地址,只是第一个元素的地址发生了改变,其他元素地址并没有发生改变!!!
int array[5] = {1, 2, 3, 4, 5};
int *p = array;
// p[1],array[1],*(p + 1),*(array + 1);
printf("array = %p, &array[0] = %p\n",p, &array[0]);
printf("%d %d\n",array[1], p[1]);
printf("%d %d %d\n",*p, *(p + 2), *p + 2);
*/
// short a[4] = {3 , 7 , 9 , 1};
// int *p1 = a;
// char *p2 = a;
/*
//指针与字符串(字符数组)
char strings[10] = "iPhone";
char *p = strings;
*(p + 1) = 'V';
printf("%s\n",p);
printf("%c----%c\n",strings[1], *(p + 1));
printf("%s\n",p + 3);
char *q = "iPhone6sPlus";
printf("%s\n",q);
printf("%c\n",*(q + 1));
// *(q + 1) = 'V';
printf("%s\n",q);
*/
char string[10] = "iPhone";
char *p = string;
int count = 0;
while (*(p + count ++)) {}
/*
while (*p != '\0') {
count ++;
p ++;
}//此方法有个缺陷,改变了p的指向。
*/
printf("%d\n",count - 1);
printf("%c\n",*p);
//指针数组
/*
int *a[2] = {0};
int number = 10;
a[1] = &number;
char *q = "iOS";
char *q1 = "Android";
char *q2 = "Windows";
char *strs[3] = {"iOS", "Android", "Windows"};
printf("%c\n",*(strs[1] + 2));
char *strings[3] = {q, q1, q2};
printf("%c\n",*(q1 + 2));
for (int i = 0; i < 3; i ++) {
printf("%s\n",strings[i]);
}
*/