关于定义一个指针与指针变量

简介:


struct  stat st;
struct  stat *st;

 

 

 


【就事论事的解释】
struct   stat   *st;
是定义了一个stat结构体的指针,
这句话的重点在于是“指针”,其本质上,(在32位的体系结构中)也就是一个32位的数而已。
对于名称和实体来说:
名称:
一个名字叫做st指针
实体:
内存里面,也只有一个32位的空间,来存放这个指针。

struct   stat  st;
定义饿了一个stat类型的结构体,名字叫做st。
这里的重点是“结构体”,其根据结构体具体定义的不同,占用不同的物理空间大小。
这里的名称和实体:
名称,是一个叫做st的结构体。
实体:
就是一个结构体,结构体有多大,st就占用了多大的物理空间。
也就是说,比如你的结构体很复杂,比如所有成员空间加起来,有80字节,那么,这个st实际就占用了80个字节的大小。

【为何容易犯错】
意思解释完了,说一下为何会犯这样的错误,
我们是定义了这个:
struct   stat   *st;
但是,实际只是定义所需要的结构体的指针,而不是实际结构体本身。

举个例子,结构体好比是一个房间。
不同类型的房间大小不同,占用的物理空间也不一样。

结构体的指针,好比一个房间的一把钥匙。
不论其所相关的房间的大小,钥匙,始终只占钥匙这么大一点的空间(默认,可以理解为4个字节,32位)。

我们之所以犯这样的错,归根结底,都是太“贪”了,以后弄了个指针(钥匙),系统就会自动给你分配好了,
指针所指向的东西(别人就会给你个房子。。。)。

【引申】
以后不论你在别处再看见类似的指针,
不管这把钥匙可以开的是,一个小房间,还是一栋别墅,还是一个汽车,还是一个玩具车,
它都只是一把钥匙而已,只是这么大而已。物理上分配的空间也都是32位而已。

记住,如果你没有得到其他的房子或汽车,而只是弄了把钥匙。除非你买了房子(自己申请一个结构体),否则,没人会白白送你房

子的(系统不会理会你这个指针指向哪里,更不会自己另外给你分配一个结构体)。

如果还没完全理解,那么教个最简单的方法,只要记住这个就好了:
钥匙 = 32位 = 4字节

这样,你就不会搞混淆了。

【后记】
如果都只是弄把钥匙,就都有了房子车子,那么现在就不会有这么多为买房买车而郁闷的了,
直接去几元钱复制一把就好了。。。
 
 
 
个人理解:
同样,结构体是如此,在定义其他类型也是一样
char *str1;
char  str2[20];
这么定义之后,我们只传给str1一直指针,而不能给str1传一个字符串。
在定义之后这样使用:
 
sprintf(str1,"....",..);
那么,这样相当于往str1里面装东西,但是str1在内存中是一个地址(可以看做一个数),那么str1在内存中只占1个或2个字节(实际根据OS来定)。把一个字符串往str1里面装,就会出现Segment fault段错误。
非要这样做,那就需要用malloc给sr1申请空间。
 
但是这样是合法的:
char *str1="asdfg";定义并初始化,系统会给str1分配一个连续的空间放这个字符串,字符串的首地址放在str1中。
 
 
str1[20]在内存中那个,不管你是不是用,它都会有20个字节。

 

目录
相关文章
|
21天前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
2月前
|
存储 安全 C++
C++:指针引用普通变量适用场景
指针和引用都是C++提供的强大工具,它们在不同的场景下发挥着不可或缺的作用。了解两者的特点及适用场景,可以帮助开发者编写出更加高效、可读性更强的代码。在实际开发中,合理选择使用指针或引用是提高编程技巧的关键。
24 1
|
3月前
|
存储 C++ 运维
开发与运维数组问题之指针的定义语法如何解决
开发与运维数组问题之指针的定义语法如何解决
27 6
|
4月前
|
C语言
【C语言】:详解函数指针变量,函数指针数组及转移表
【C语言】:详解函数指针变量,函数指针数组及转移表
49 2
|
4月前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
29 1
|
4月前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
34 1
|
4月前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
38 0
|
5月前
|
存储 C语言
字符指针变量与字符数组的比较
字符指针变量与字符数组的比较
39 3
|
4月前
|
C语言
【C语言】:深入理解指针变量
【C语言】:深入理解指针变量
21 0
|
4月前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)