初识c语言收尾指针结构体

简介: 初识c语言收尾指针结构体

一 #define定义宏


#define可以定义宏 格式如下

#define ADD(x,y) ((x)+(y))

printf(“%d”, ADD (2,3));

这里就是一个简单的用define定义的加法宏

这里有两个需要注意的点


1 define定义宏的参数不需要规定格式

2 注意后面表达式 每个参数都需要用括号括起来 并且最后需要用大括号括起来


二 初识指针


指针是什么呢?


要解释这个问题 我们先来看以下代码


int a = 10;
  int* p = &a;


从系统内存的角度解释下上面两段代码


第一段代码 创建一个整型变量a 并且像内存申请四个地址 将a的值赋值为10


关于内存的知识 我们都知道计算机的内存很大的

为了很好的利用这些内存 我们将这些它们分割成很多个小的内存

并且规定 每个小的内存占用一个字节即8个bit位的空间

并且它们都有一个属于自己的编号


关于编号 在三十二位系统中 一个地址有32个位 即32个01组成 所以它能够表示2的32次方的地址

每一个地址有占用4个字节(32个位)的大小


第二段代码 我们创建一个指针变量p来存放a的地址

又因为我们上面的解释 我们很容易能推断出


指针就是地址

地址就是内存的编号

在三十二位系统上 地址占用4个字节的大小

在六十四位系统上 地址占用8个字节的大小


再回到第二段代码


int* p = &a;


其中int* 表示它是一个整形指针

int 表示指针指向的地址是一个整型

*表示后面的p是一个指针

p是一个指针变量

那么如果我需要创建一个指针 它指向一个字符类型的变量 我应该怎么创建呢?


char a = 'a';
char* pa = &a;


小tip: 我们口头说的指针其实一般指的是指针变量


知道指针只有又有什么用呢?


要回答这个问题我们首先要知道解引用操作符


  char a = 'a';
  char* pa = &a;
  *pa = 'c';
  printf("%c",a);


我们上面解释了 指针其实就是地址 而地址其实就是内存单元的编号

也就是说我们可以通过指针找到这个内存单元在哪里

找到这个一个内存单元之后我们可以使用‘*;操作符来修改这个内存单元里面存放的内容

大家可以试着运行上卖弄的四行代码 看看运行出来的结果是什么


三 初识结构体


为什么要有结构体


因为单单凭借int float这些类型的变量无法解释一个复杂的对象


结构体是怎么创建的呢


  struct stu
  {
    char name[20];
    short age;
    int   id;
  };
struct stu s1 = { "zhangsan",18,2115110165 };


我们可以看到 结构体的创建方式如上


可以比如成造房子


我们首先创造一个图纸 规定了这个房子应该有名字 应该有房间 应该有床

然后到下面再根据个人的需求创造一个自己的房子


结构体怎么调用呢


结构体调用有两种方式


void print(struct stu* ps)
{
  printf("%d\n", ps->id);
}
printf("%d", s1.age);


printf("%d\n", (*ps).id);



相关文章
|
25天前
|
C语言
【c语言】指针就该这么学(1)
本文详细介绍了C语言中的指针概念及其基本操作。首先通过生活中的例子解释了指针的概念,即内存地址。接着,文章逐步讲解了指针变量的定义、取地址操作符`&`、解引用操作符`*`、指针变量的大小以及不同类型的指针变量的意义。此外,还介绍了`const`修饰符在指针中的应用,指针的运算(包括指针加减整数、指针相减和指针的大小比较),以及野指针的概念和如何规避野指针。最后,通过具体的代码示例帮助读者更好地理解和掌握指针的使用方法。
45 0
|
23天前
|
存储 C语言
如何在 C 语言中实现结构体的深拷贝
在C语言中实现结构体的深拷贝,需要手动分配内存并逐个复制成员变量,确保新结构体与原结构体完全独立,避免浅拷贝导致的数据共享问题。具体方法包括使用 `malloc` 分配内存和 `memcpy` 或手动赋值。
30 10
|
23天前
|
存储 大数据 编译器
C语言:结构体对齐规则
C语言中,结构体对齐规则是指编译器为了提高数据访问效率,会根据成员变量的类型对结构体中的成员进行内存对齐。通常遵循编译器默认的对齐方式或使用特定的对齐指令来优化结构体布局,以减少内存浪费并提升性能。
|
24天前
|
C语言
【c语言】指针就该这么学(3)
本文介绍了C语言中的函数指针、typedef关键字及函数指针数组的概念与应用。首先讲解了函数指针的创建与使用,接着通过typedef简化复杂类型定义,最后探讨了函数指针数组及其在转移表中的应用,通过实例展示了如何利用这些特性实现更简洁高效的代码。
15 2
|
25天前
|
C语言
如何避免 C 语言中的野指针问题?
在C语言中,野指针是指向未知内存地址的指针,可能引发程序崩溃或数据损坏。避免野指针的方法包括:初始化指针为NULL、使用完毕后将指针置为NULL、检查指针是否为空以及合理管理动态分配的内存。
|
25天前
|
C语言
C语言:哪些情况下会出现野指针
C语言中,野指针是指指向未知地址的指针,通常由以下情况产生:1) 指针被声明但未初始化;2) 指针指向的内存已被释放或重新分配;3) 指针指向局部变量,而该变量已超出作用域。使用野指针可能导致程序崩溃或不可预测的行为。
|
27天前
|
编译器 C语言
共用体和结构体在 C 语言中的优先级是怎样的
在C语言中,共用体(union)和结构体(struct)的优先级相同,它们都是用户自定义的数据类型,用于组合不同类型的数据。但是,共用体中的所有成员共享同一段内存,而结构体中的成员各自占用独立的内存空间。
|
1月前
|
存储 C语言
C语言32位或64位平台下指针的大小
在32位平台上,C语言中指针的大小通常为4字节;而在64位平台上,指针的大小通常为8字节。这反映了不同平台对内存地址空间的不同处理方式。
|
27天前
|
存储 C语言
C语言:结构体与共用体的区别
C语言中,结构体(struct)和共用体(union)都用于组合不同类型的数据,但使用方式不同。结构体为每个成员分配独立的内存空间,而共用体的所有成员共享同一段内存,节省空间但需谨慎使用。
|
1月前
|
编译器 C语言 C++
C语言结构体
C语言结构体
25 5