2.3 KiB
2.3 KiB
地址、指针、指针变量
#include <stdio.h>
int main(){
int a = 1;
int* p;//p指针变量 可以用来存储整型变量的地址
double d = .3;
//数据类型 变量名;
//数据类型* 变量名;
//&取地址符
printf("&a=%d\n", &a);
printf("&d=%d\n", &d);
//1.使用指针变量存起来
p = &a;
printf("p=%d\n", p);
//间接访问符 *
//*p <=> a
*p = 10;
printf("*p=%d\n", *p);
printf("a=%d\n", a);
void* jk;
jk = &a;
printf("%d\n", *(int *)jk);
return 0;
}
指针与二级指针
#include <stdio.h>
int main(){
int a = 1;
int *p;//一级指针 可以指向一个整型变量的地址
int **q; //二级指针 可以指向一个整型指针变量的地址
p = &a;//a的地址
q = &p;//p的地址
printf("a=%d\n", a);
printf("*p=%d\n", *p);//*p <=> a
printf("**q=%d\n", **q);//*q <=> p **q <=> a
return 0;
}
指针作为函数形参
#include <stdio.h>
/*
指针与函数
1.形参是指针变量
2.返回值是指针变量
*/
//编写一个函数,传入两个整数/地址,将两个数的值交换
//函数在调用过程中
void swap(int* a, int* b){//值传递
int t;
t = *a;
*a = *b;
*b = t;//使用中间变量交换两个变量的值
printf("swap: %d %d\n", *a, *b);
}
int main(){
int a, b;
a = 1;
b = 2;
swap(&a, &b);
printf("main: %d %d\n", a, b);
return 0;
}
指针与一维数组的关系
#include <stdio.h>
/*
指针与数组的关系
指针与一维数组
*/
int main(){
int nums[] = {1, 2, 3, 4, 5};
//数组在内存中是连续存储 指针变量运算后会得到下一个/前一个
//nums是一个指针 指向自己这个数组的第一个元素
//nums[下标] <=> *(nums+下标)
//C语言中只有 *(nums+下标)写法
//编译器会将 nums[下标]翻译成上面这种
int *p;
p = nums;//nums、p都可以指向该数组的第一个元素
//p可以进行赋值运算 但是 nums不行 因为他只是一个虚拟的指针 只能使用*
printf("%d\n", *nums);
printf("%d\n", *(nums+1));
printf("%d\n", *p++);//1
printf("%d\n", *p++);//2
printf("%d\n", *p++);//3
printf("%d\n", *p++);//4
printf("%d\n", *p);//5
return 0;
}