基本介绍
简单的说 指针表示一个地址(存放的也是地址),
举例说明:
#include<stdio.h>
void main(){
//定义一个num
int num = 1;
//定义指针类型 int *
int *ptr = # //指针类型指向 变量num
//输出num的值 格式是%d
//输出num的地址值,输出的格式是%p, &num代表取出num的地址值
printf("num的值 = %d \t num的地址值 = %p \n",num,&num);
//打印出指针的地址值,和指针指向它所对应的变量的地址值
printf("\nptr的地址值是 %p, ptr 存放的地址值是一个地址,地址就是num的地址 %p \n",&ptr,ptr);
//获取指针指向的值 答案应该是1
printf("\nptr指向的值是 %d",*ptr);
}
#include<stdio.h>
void main(){
int a = 300; // a = 300
int b = 400; // b = 400
int * ptr = &a; //ok ptr 指向 a
*ptr = 100; // a = 100
ptr = &b; // ok ptr 指向 b
*ptr = 200; // b = 200
printf("\n a=%d,b=%d,*ptr=%d", a, b, *ptr); //a = 100, b = 200, *ptr = 200
}
指针细节说明
1)基本类型,都有对应的指针类型, 形式为 数据类型 *,比如 int 的对应的指针就是 int *, float 对应的指针 类型就是 float * , 依次类推。
2)此外还有指向数组的指针、指向结构体的指针,指向共用体的指针,(二级指针,多级指针)。
值传递和地址传递
C 语言传递参数(或者赋值)可以是值传递(pass by value),也可以传递指针(a pointer passed by value), 传递指针也叫地址传递。
1)默认传递值的类型:基本数据类型 (整型类型、小数类型,字符类型), 结构体, 共用体。
2)默认传递地址的类似:指针、数组
值传递和地址传递使用特点:
1)值传递:将变量指向的存储内容,在传递/赋值时,拷贝一份给接收变量.
由下图可见,地址值发生了变化。
2)地址传递 也叫 指针传递:如果是指针,就将指针变量存储的地址,传递给接收变量,如果是数组,就将数 组的首地址传递给接收变量。
3)代码展示
#include<stdio.h>
void main(){
int num = 100;
int *p = #
int * p2 = p;
*p2 = 55;
printf("num=%d *p=%d *p2=%d ", num, *p, *p2);
}
由下图可见,num的值变成了55 ,*p , *p2d的值都是 55,
num的地址值不变,*p 和 *p2的地址值相同,并且p和p2 都指向num的地址值。