C语言_1-Pointer

本文详细介绍了C++中的指针概念,包括地址的理解、左值与右值的区别,以及指针的使用方法。通过实例解释了如何通过指针进行内存地址的访问和值的传递。文中还探讨了指针操作如`*`和`&`的含义,并分析了`a++`和`++a`的区别。此外,学习者应掌握指针在变量赋值中的作用,以及如何通过指针实现高效的数据操作。
摘要由CSDN通过智能技术生成

学习目标:

掌握指针的应用

学习内容:

地址
遇到的名词的理解
指针的理解及应用

学习时间:

2022-2-26

学习产出:

1,地址:
简单抽象的理解,地址是一定大小用来存放数据的特定位置,

地址:100 | 108 | 116
值 : 12 | 10 | 02

每个bit 对应的地址位+1, 一般读取的地址都是首地址


左值&右值
左值:指明对象,一般为一个变量 可以被声明。
右值:表示一个值
左表达式=右表达式;



2,指针
& 用于产生操作数的 内存地址

int a =0;
int *b=&a;
printf("%x\n",&a)

打印出来的结果的为整型变量a的地址。
int * b 是定义变量b为指针类型。 含义: 访问变量所指向的地址—>间接访问
* 单目操作符
理解: *b 是一个指向特定地址的值

*b=&a;

可以理解*b 的右值为0,地址和变量a 相同。

简单理解 符号* 表示去访问 a 地址下的值, 而变量b 的地址是&赋予的

*&a=25

其实所表达的意思就是 在将a=25 赋值给a的地址空间。


a++代表先取值,后运算。
++a代表先运算,后取值。
a=1;
如b = a++;
得b = 1
若b = ++a;
得b = 2

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<windows.h> #include<string.h> #include<stdlib.h> #include<math.h> typedef struct character_name { char name[100]; struct character_name* next; }char_name; typedef struct character_title { char title[100]; struct character_title* next; }char_title; typedef struct character_identity { char identity[100]; struct character_identity* next; }char_iden; typedef struct character_profession { char profession[100]; int level; struct character_profession* next; }char_pro; typedef struct character_ability { char ability[100]; char explain[1000]; struct character_ability* next; }char_abi; typedef struct character_race { char race[100]; struct character_race* next; }char_race; typedef struct character_information { int age; int gender; char_name* _name; char_title* _title; char_iden* _iden; char_pro* _pro; char_abi* _abi; char_race* _race; struct character_information* next; }char_inf; char_inf* initialization() { char_inf* node = (char_inf*)malloc(sizeof(char_inf)); node->_name = (char_name*)malloc(sizeof(char_name)); node->_title = (char_title*)malloc(sizeof(char_title)); node->_iden = (char_iden*)malloc(sizeof(char_iden)); node->_pro = (char_pro*)malloc(sizeof(char_pro)); node->_abi = (char_abi*)malloc(sizeof(char_abi)); node->_race = (char_race*)malloc(sizeof(char_race)); return node; } char_inf* ceshi, * current, * end; char_name* name_current, * name_end; char_title* title_current, * title_end; char_iden* iden_current, * iden_end; char_pro* pro_current, * pro_end; char_abi* abi_current, * abi_end; char_race* race_current, * race_end; int main() { ceshi = initialization(); ceshi->age = 666; ceshi->gender = 1; name_current = ceshi->_name; strcpy(name_current->name, "ceshi_name_1"); name_current->next = (char_name*)malloc(sizeof(char_name)); name_current = name_current->next; name_current->next = NULL; strcpy(name_current->name, "ceshi_name_2"); strcpy(ceshi->_title->title, "ceshi_title"); strcpy(ceshi->_iden->identity, "ceshi_identity"); strcpy(ceshi->_pro->profession, "ceshi_profession"); strcpy(ceshi->_abi->ability, "ceshi_ability"); strcpy(ceshi->_abi->explain, "ceshi_ability_explain"); strcpy(ceshi->_race->race, "ceshi_race"); ceshi->_pro->level = 666; name_current = ceshi->_name; printf(" Age: %d\n", ceshi->age); printf(" Gender: "); if (ceshi->gender == 0) printf("woman\n"); else printf("male\n"); while (name_current != NULL) { printf(" Name: %s\n", name_current->name); name_current = name_current->next; } printf(" Title: %s\n Identity: %s\n Profession: %d\n Ability: %s\n Ability_Explain: %s\n Race: %s\n", ceshi->_title->title, ceshi->_iden->identity,ceshi->_pro->level,ceshi->_abi->ability,ceshi->_abi->explain,ceshi->_race->race); return 0; } 怎样可以消除取消对NULL指针的引用这个警告
07-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>