指针变量如何进行初始化,指针变量应该用地址初始化
1) 定义的同时进行初始化
1)完全初始化
int *p = &a; //用a的地址初始化 p这个指针变量
//另外一种描述方法:p指向了a
int *p1 = &a,*p2 = &a; //p1 p2都指向了a
2)部分初始化
int *p3 = &b,*p4; //定义了两个指针变量 p3 p4
p4 = &b;
2)先定义后初始化
int *p7;
p7 = NULL; //
//3)如果定义了一个指针变量,但是我不知道让这个指针指向谁
int *p5 = NULL; //NULL 是空(0)
int *p6 = 0; //空
把一个指针赋值一个空,什么也不指
常见的易犯的错误
int *p8 = 1000; 杜绝
p6 = p1; //p6指向了a
定义了一个整形变量 *p1 ,p1是一个指针变量
*指针变量 作用:获取指针变量指向的内存空间的内容
获取指针变量值所对应的存储单元
int value = *p1; //4
// 给指针变量指向的内存单元赋值
*p1 = 100;
value = *p1; //100
printf("value = %d\n",a);
//"*" 的两种用法
// 1) 用于定义一个指针变量
// 2) 存储指针变量指向的存储空间的内容
void swap3(int *p,int *p1){
//通过指针直接修改变量的值了
int temp;
temp = *p;
*p = *p1;
*p1 = temp;
}
int main(int argc, const char * argv[]) {
int a = 4,b = 5; // a = 5,b = 4
printf("交换前:a = %d,b = %d\n",a,b);
swap3(&a, &b);
printf("交换后:a = %d,b = %d\n",a,b);
return 0;
}
指针的应用场景:
1)在被函数中可以修改主调函数中的变量的值
void changValue(int *p){
*p = 100;//这里就表示将100赋值给指针p指向的存储单元 也就是a的值;这时就改变了a的值;
}
void test(){
int a = 1;
int *p1 = &a; //p1指向了a,定义了一个指针变量;
printf("%p\n",&a);
printf("%p\n",p1);
changValue(p1);
printf("%d\n",*p1); //1
printf("%d\n",a);
}
2)让函数可以有多个返回值
void caculator(int x,int y,int *add,int *jian,int *cheng,float *chu){
//在函数的内部访问了主调函数中的变量值,这里直接在被调函数中改变了主调中的各元素的值
*add = x+y;
*jian = x-y;
*cheng = x*y;
*chu = x/(float)y;
}
int main(int argc, const char * argv[]) {
int add=0;
int jian=0;
int cheng=0;
float chu=0.0f;
caculator(12, 4, &add, &jian, &cheng, &chu);
printf("add = %d\n",add);
printf("jian = %d\n",jian);
printf("cheng = %d\n",cheng);
printf("chu = %.2f\n",chu);
return 0;
}
二级指针:指的是指向指针变量的指针变量叫二级指针;
什么类型的指针就要指向什么类型的变量;
|
|