求高手帮忙解答一个指针的问题

[复制链接]
查看11 | 回复5 | 2021-1-27 06:48:55 | 显示全部楼层 |阅读模式
C++primerplus里的例子
#include
structantarctica_years_end
{
intyear;
};
intmain()
{
antarctica_years_ends01,s02,s03;
s01.year=1998;
antarctica_years_end*pa=&s02;
pa->year=1999;
antarctica_years_endtrio[3];
trio[0].year=2003;
std::coutyearyearyearyearyear -->
回复

使用道具 举报

千问 | 2021-1-27 06:48:55 | 显示全部楼层
不是*ppa=arp,而是**ppa=arp,定义的时候不是写的很清楚么:constantarctica_years_end**ppa=arp;
*ppa=arp[0]
回复

使用道具 举报

千问 | 2021-1-27 06:48:55 | 显示全部楼层
引用1楼FightForProgrammer的回复:不是*ppa=arp,而是**ppa=arp,定义的时候不是写的很清楚么:constantarctica_years_end**ppa=arp;
*ppa=arp[0]

这个是声明的时候初始化,不能这样理解吧**ppa=arp
回复

使用道具 举报

千问 | 2021-1-27 06:48:55 | 显示全部楼层


理解和讨论之前请先学会如何观察!
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
对学习编程者的忠告:

多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程!
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步Debug版对应汇编一行!
单步Debug版对应汇编千行不如单步Release版对应汇编一行!
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(TurboC或BorlandC用TurboDebugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
但我又不得不承认:
有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物;
而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。
而我本人属前者。
不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);或者cout引用5楼xxl19900724的回复:你定义的是二级指针,二级指针就是指针的指针,存放的是指针的地址,而你的指针里存放的是你所指对象的地址,明白了人家为啥用*ppa,你可以这样理解:int*(*ppa),这时候*ppa是不是指向的就是你引用的那个对象的地址,不就不类似于int*ppa里的ppa吗,都是指针变量,明白了没?
我好像是二级指针的初始化弄没太明白,char**p=a;这个声明初始化的意思是不是p=a;而我一开始理解成了*p=a,正确理解是p=a这样理解是对的吧?
回复

使用道具 举报

千问 | 2021-1-27 06:48:55 | 显示全部楼层
仅供参考://在堆中开辟一个4×5的二维int数组
#include
#include
int**p;
inti,j;
voidmain(){
p=(int**)malloc(4*sizeof(int*));
if(NULL==p)return;
for(i=0;i
//在堆中开辟一个3×4×5的3维int数组
#include
#include
int***p;
inti,j,k;
voidmain(){
p=(int***)malloc(3*sizeof(int**));
if(NULL==p)return;
for(i=0;i
//在堆中开辟一个2×3×4×5的4维int数组
#include
#include
int****p;
inth,i,j,k;
voidmain(){
p=(int****)malloc(2*sizeof(int***));
if(NULL==p)return;
for(h=0;h
回复

使用道具 举报

千问 | 2021-1-27 06:48:55 | 显示全部楼层
《牛肉干》
C语言上机课,某女同学偷偷吃起牛肉干。
有一粒牛肉干掉到了键盘上,卡在7和8键之间。
女同学就在键盘上抠啊、抠啊、抠啊……
程序里一行代码变成这个样子:
int*pa=&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&a;
后来的结局是
————程序顺利通过编译,运行结果正确!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行