#include <stdio.h>
int main(int argc, char *argv[])
{
int f = 999;
printf("&f = %p\n", &f); // &f = 0060FE98 格式化输出地址 使用%p
// & 取一个变量的地址 一般地址用十六进制数标识
// int * p 定义一个指针变量p & 取地址 * 取值
// int * p = &f;
int * p;
p = &f;
printf("%d\n", *p); // 999
printf("%p\n", p); // 0060FE98
return 0;
}
案例
#include <stdio.h>
int main(int argc, char *argv[])
{
int *p1, *p2, temp, a, b;
p1 = &a;
p2 = &b;
printf("请输入:a b的值:\n");
scanf("%d %d", p1, p2); // 给p1和p2指向的变量赋值
temp = *p1; // 用p1指向的变量(a)给temp赋值
*p1 = *p2; // 用p2指向的变量(b)给p1指向的变量(a)赋值
*p2 = temp; // temp给p2指向的变量(b)赋值
printf("a=%d b=%d\n",a, b);
printf("*p1=%d *p2=%d\n", *p1, *p2);
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 0x1234, b = 0x5678;
char *p1, *p2;
printf("%#x, %#x\n",a, b); // 0x1234, 0x5678
p1 = (char *) &a;
p2 = (char *) &b;
printf("%#x %#x\n",*p1,*p2); // 0x34 0x78
p1++;
p2++;
printf("%#x %#x\n",*p1, *p2); // 0x12 0x56
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[])
{
// 数组
int a[5] = {0, 1, 2, 3, 4};
int *p;
p = a;
printf("a[2] = %d\n", a[2]); // a[2] = 2
printf("p[2] = %d\n", p[2]); // p[2] = 2
printf("*(p+2) = %d\n", *(p+2)); // *(p+2) = 2
printf("*(a+2) = %d\n", *(a+2)); // *(a+2) = 2
printf("p = %p\n", p); // p = 0060FE88 89 8A 8B 8C 8D 8E 8F 90
printf("p+2 = %p\n", p+2); // p+2 = 0060FE90
printf("&a[0] = %p\n", &a[0]); // &a[0] = 0060FE88
printf("&a[2] = %p\n", &a[2]); // &a[2] = 0060FE90
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[])
{
// 数组
char ch[6] = "hello";
char *p;
p = ch;
printf("%c\n", ch[0]); // h
printf("%c\n", ch[5]);
printf("%c\n",*p); // h
printf("%p\n", p); // 0060FE92
printf("%p\n", ch); // 0060FE92
printf("%p\n", p+5); // 0060FE97
char *d;
d = p+5-2;
printf("%c\n",*d); // l
return 0;
}