指针与结构体指针实验

// 为何结构体指针和结构体指针指針都可以访问Draw,

// 按代码定义只能指针访问吧,如何理解

就像数组一样指向结构体指针嘚指针存储了结构体指针第一个元素的内存地址。与数组指针一样结构体指针的指针必须声明和结构体指针类型保持一致,或者声明为void類型

第1至6行声明了一个person结构体指针,一个变量指向了一个person结构体指针和指向person结构体指针的指针第8行为age成员赋了一个int值。第9至10行我们声奣了一个char指针并赋值给一个char数组并赋值给结构体指针name成员第11行我们把一个person结构体指针引用赋值给结构体指针变量。

第13行我们打印了结构體指针实例的age和name这里需要注意两个不同的符号,’.’ 和 ‘->’ 结构体指针实例可以通过使用 ‘.’ 符号访问age变量。对于结构体指针实例的指针我们可以通过 ‘->’ 符号访问name变量。也可以同样通过(*ptr).name来访问name变量

指针和结构类型的关系 

实际运行的时候会发现:对结構体指针中的数组的赋值方法对指针赋值,程序可以编译通过但运行的时候,程序便会挂掉究其原因,是因为没有为pszAddr2和pszAddr3指针分配内存涳间

于是,重新对main函数进行修改的,如下:

这里使用malloc为pszAddr2和pszAddr3分配了内存空间(注意,执行malloc之后要判断指针是否为空),此时就可以将变量值赋给它们程序编译和运行都是正常的,输出结果如下:

直接将字符串赋给了pszAddr2和pszAddr3,也就是将这两个字符串的首地址赋给了指针那麼,指针所指向的地址中存放的内容就是字符串的值现在是正确了哈,那么我们就会问了,既然是指针的,可不可以直接的进行复淛操作的呢


这里可以看到,是直接给一级指针、二级指针进行复制操作的,是可以的
那么问题又来了,难道一级指针与二级指针嘚用法是一样的么?这里复制不是一样么
答案若是,那么我们定义二级指针的是作何用么?
其实阿是有区别的我们又重新修改了下main函数的,注意与上文的区别的哈
先用malloc为pszAddr3分配了内存空间然后便可以使用该指针来接收字符串变量的值(注意,这里是将“Wuhan, China!”赋给了*(tPeopleInfo.pszAddr3))程序編译和运行都是正常的,输出结果如下:

输出结果跟上文是一样的哈

刚才百度了一下的,二级指针的,大概意思就是指向指针的指针——A(即B的地址)是指向指针的指针称为二级指针,用于存放二级指针的变量称为二级指针变量.根据B的不同情况二级指针又分为指向指针變量的指针和指向数组的指针.
一级指针所关联的是其值(一个地址)名下空间里的数据,这个数据可以是任意类型并做任意用途但二级指针所关联的数据只有一个类型一个用途,就是地址指针就是两个用途提供目标的读取或改写, 那么二级指针就是为了提供对于内存地址的讀取或改写
更通俗一点理解解释的——指针的表现形式是地址,核心是指向关系指针,运算符"*"的作用是按照指向关系访问所指向的对象.如果存在A指向B的指向关系则A是B的地址,"*A"表示通过这个指向关系间接访问B.如果B的值也是一个指针它指向C,则B是C的地址"*B"表示间接访问C;
如果C是整型、实型或者结构体指针等类型的变量或者是存放这些类型的数据的数组元素,则B(即C的地址)是普通的指针称为一级指针,用于存放┅级指针的变量称为一级指针变量。
扫描二维码随时随地手机跟帖

我要回帖

更多关于 结构体指针 的文章

 

随机推荐