例一:
通过P里面存的地址找到他所指向的那个对象
p只是个变量,int*p--指针变量p,*p--操作符
%p --以地址的形式打印
*p存放的是a的地址(意思是地址*p=a)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 10;//申请了四个字节空间
printf("%p\n", &a);
int* p = &a;//p指向a,所以指针的类型是int
printf("%p\n", p);
*p = 20;//* - 解引用操作符 /间接访问操作符
printf("a = %d\n", a);
printf("%d\n", *p);
return 0;
}
运行结果:
例二:
单目操作符
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
* | 间接访问操作符(解引用操作符) |
d是个变量,*pb是个指针变量,*pb =多少是对d进行新的赋值。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
double d = 3.14;
double* pb = &d;//32-4 64-8
*pb = 5.8;//新的赋值
printf("%lf\n", d);
printf("%lf\n", *pb);
printf("%d\n", sizeof(pb));
return 0;
}
32位运行结果:
例三:
访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//创建一个结构体类型
struct Book
{
char name[20];//C语言程序设计
short price;//33
};
int main() {
//利用结构体类型创建一个该类型的结构体变量
struct Book b1 = { "C语言程序设计",33 };
//printf("书名:%s\n", b1.name);
//printf("价格:%d元\n", b1.price);
//b1.price = 15;
//printf("修改之后的价格:%d\n", b1.price);
//pb指向b1,*pb--指针,指针指向的类型对象是struct Book
struct Book* pb = &b1;
//利用pb打印我的书名和价格
//俩种操作符.和->
//. 结构体变量.成员
//-> 结构体指针->成员
printf("%s\n", pb->name);
printf("%d\n", pb->price);
/*printf("%s\n", (*pb).name);
printf("%d\n", (*pb).price);*/
return 0;
}
运行结果:
改书名(修改数组-库函数)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include <stdint.h>
//创建一个结构体类型
struct Book
{
char name[20];//C语言程序设计
short price;//33
};
int main() {
//利用结构体类型创建一个该类型的结构体变量
struct Book b1 = { "C语言程序设计",33 };
//strcpy-string copy -字符串拷贝 - 库函数-string.h
strcpy(b1.name, "C++");
printf("%s\n", b1.name);
return 0;
运行结果: