------Java培训、Android培训、iOS培训、.Net培训、期待与您交
//
// main.c
// 指针
//
// Created by 李佳乐 on 15-3-17.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
/*
******************* 指针变量概念及定义方法 *******************
指针: 地址
指针变量: 专门用来存放地址的变量
******************* 指针变量的定义 *******************
格式: 数据类型 * 指针变量名;
int *num // int * num // int* num (都可以)
******************* 注意 *******************
1> 指针变量只能用来存放地址
2> * 表示这个变量是一个指针变量
3> int 表示当前指针变量只能存放 int 类型的变量地址
4> 指针变量也区分全局的和局部的
double *pd: 定义了一个指针变量,变量名为pd ,pd 以后只能
用来存放double类型的变量
******************* 指针变量的初始化 *******************
int a=3,b=3;
int x=2,y;
******************* 指针变量的初始化
1> 定义的同时进行初始化
int *p = &a; //指针变量p指向了a,通过a的地址进入到a得内存空间获取到内容
2> 先定义指针变量,然后初始化
int *p1;
p1 = &b;
3> 可以用一个已经存在的指针变量初始化
int *p1 = p;
4> 给指针变量赋值 NULL
int *p2 = NULL //表示 指针变量 p2指向内存中地址为0的地方
int *p2 = 0; // 特殊情况
5> 指针变量可以被重新赋值(指向发生改变)
int *p3 = &x;
p1 = p3;
6> int *p4; //p4存放的是垃圾值
使用 * 注意
使用的场合有两个
1> 用在定义指针变量的时候,表示定义的是一个指针变量
2> *指针变量名 表示获取指针变量指向的内存空间
*/
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a = 3, b = 3;
int *p = &a; // p指向了a
printf("%ld\n",sizeof(p));
//使用* 获取指针变量指向的内存空间的内容
printf("*p = %d\n",*p);
//使用*p 设置指针变量指向的内存空间的内容
*p = 100;
printf("*p =%d\n",*p);
return 0;
}
// ********** 用函数实现两变量值交换(指针传递地址)
//
// Created by 李佳乐 on 15-3-17.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
#include <stdio.h>
/*
//********** 用函数实现两变量值交换(指针传递地址)
// 定义函数,实现两个变量值的交换
// (在main函数中调用不能交换)
void swap1(int x,int y){
int temp;
temp = x;
x = y;
y = temp;
}
********** 地址交换,不改变内存中得数据
// 定义函数,实现两个变量值的交换:传地址方式(如果交换的是指针变量值
//则不能交换,因为当函数 执行完以后,交换的地址随之释放,内存空间的数据没有发生改变)
void swap2(int *px,int *py){
int *ptemp;
ptemp = px;
px = py;
py = ptemp;
}
*/
//********** 交换两指针变量的值
//定义函数,实现两个指针变量值的交换
void swap3(int *px,int *py){
int ptemp;
ptemp = *px; //ptemp = 3
*px = *py; //a = b; a = 5 , b = 5;
*py = ptemp; // b = 3;
}
int main(int argc, const char * argv[]) {
int a = 3,b = 5;
// void swap1(int a,int b);
//调用函数实现交换
swap3( &a, &b);
printf("a = %d,b = %d\n",a,b);
return 0;
}
// 在被调函数中,修改主调函数的变量值
//
// Created by 李佳乐 on 15-3-17.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
//让一个函数可以有多个返回值
//问题,
//******************** 使用指针实现两个数的 加 减 乘 除
#include <stdio.h>
//计算
void calulator(int x,int y,int *psum,int *pjian,int *pcheng,double *pchu){
//把x + y 的结果放到主调函数中 sum变量中
*psum = x + y;
*pjian = x - y;
*pcheng = x * y;
*pchu = x / (float)y;//float 强制类型转换,强制转换为float类型
}
int main(int argc, const char * argv[]) {
int a = 10,b = 3;
int sum,jian,cheng;
sum = jian = cheng = 0;
double chu;
calulator(a,b,&sum,&jian,&cheng,&chu);
printf("%d,%d,%d,%.2f\n",sum,jian,cheng,chu);
return 0;
}