# include <stdio.h>
int main()
{
int num = 1024; //整型变量
int * ptr_num; //整型指针变量
ptr_num = # //取num的地址赋值给ptr_num变量
printf("num的值为:\n%d\n",num);
printf("num的内存地址为:\n%p\n",&num);
printf("ptr_num的值为:\n%p \n",ptr_num);
printf("ptr_num的内存地址为:\n%p \n",&ptr_num);
printf("*ptr_num指向的值为:\n%d\n",*ptr_num);
return 0;
}
指针的赋值
# include<stdio.h>
int main()
{
int num1 = 1024;
int num2 = 2048;
int * ptr_num1;
int * ptr_num2;
ptr_num1 = &num1;
ptr_num2 = &num2;
printf("num1的值是:%d\t num1的地址是%p\n",num1,ptr_num1);
printf("num2的值是:%d\t num1的地址是%p\n", num2, ptr_num2);
printf("\n");
//将变量num1的值 赋给变量num2
//num2 = num1; //最简单的方法:
*ptr_num2 = *ptr_num1; //等价于 num2 = num1;
printf("重新赋值后:\n");
printf("num1的值是:%d\t num1的地址是%p\n", num1, ptr_num1);
printf("num2的值是:%d\t num1的地址是%p\n", num2, ptr_num2);
printf("\n");
ptr_num2 = ptr_num1; //num1的地址赋给了num2
printf("重新赋值(地址)后:\n");
printf("num1的值是:%d\t num1的地址是%p\n", num1, ptr_num1);
printf("num2的值是:%d\t num1的地址是%p\n", num2, ptr_num2);
printf("\n");
* ptr_num2 = 100000;
printf("num1的值是:%d\t num1的地址是%p\n", num1, ptr_num1);
printf("num2的值是:%d\t num1的地址是%p\n", num2, ptr_num2);
return 0;
}
小结
1、指针就是一个变量,用来存放另一个变量的地址
int num = 10;
int * ptr_num;
*ptr_num = #
int * ptr_num2;
ptr_num2 = ptr_num; 两个指针都指向了同一块内存
*ptr_num2 = 99; 等价于 num =99;
//数组
# include<stdio.h>
int main()
{
//数组名就是数组的首地址
int i;
double score[] = {98,87,65,43,21};
double * ptr_score = score;
printf("数组的首地址:%p\n数组首元素的地址:%p\n",score,&score[ 0 ]);
for (i = 0; i < 5; i++)
{
//printf("%.2lf\n",score[i]);
printf("%.2lf\n",* (ptr_score + i));
}
return 0;
}
# include<stdio.h>
int main()
{
int array[] = { 15,20,25,30,35 };
int i;
int* ptr_array = array;
for (i = 0; i < 5; i++)
{
printf("第%d个元素的值为%d\t地址为:%p \n", i + 1,*ptr_array,ptr_array);
ptr_array++;
}
return 0;
}