指针数组,数组指针,函数

1|0指针数组

指针数组,首先它是一个数组,数组里面的存储的是一个个指针,例如int* p[5];,指针数组里面的元素大小都是一样的,都是一个指针的大小,也就是8个字节(64位机器),sizeof(p);就为40个字节。下标的本质:下标的本质就是偏移量,[]的含义是解引用

#include <stdio.h> int main(void) { int* p[5]; printf("数组p的大小:%zd\n", sizeof(p)); return 0; }

image
当我们把p+1后,它与p之间就差了一个指针大小也就是8个字节。

#include <stdio.h> int main(void) { int* p[5]; printf("p=%p\n", p); printf("p+1=%p\n", p+1); return 0; }

image

2|0数组指针

数组指针,首先它是一个指针,这个指针的类型是一个有长度的数组,如果我们把p+1后,它与p之间就会差数组元素个数的大小,例如int(*p)[3];

#include <stdio.h> int main(void) { int(*p)[3]; printf("p=%p\n", p); printf("p+1=%p\n", p+1); return 0; }

image
因为int(*p)[3];里面有三个int大小也就是12个字节,所以p+1就多了12个字节。

3|0函数

函数是C语言的基本组成单位,首先是函数的定义,函数里面封装的都是一段逻辑代码,用来处理事务的,定义好后,就直接在main函数中调用即可,大大增强了代码的复用。定义格式:

函数返回值类型 函数名(参数类型 参数名){ }

函数名可采用驼峰命名法和匈牙利命名法。例如我们定义一个计算两个数相加的函数

#include <stdio.h> int addNum(int a, int b) { return a + b; } int main(void) { printf("%d\n", addNum(2,3)); return 0; }

image

4|0形参和实参

形参只是一个个变量,而实参都是一个个实际的值。我们在main函数中创建并初始化一个变量。我们在函数中的任何运算都不会影响它本身的值,因为我们的作用域不同。

#include <stdio.h> void addNum(int a) { a = 20; } int main(void) { int a = 10; printf("修改前a的值:%d\n", a); addNum(a); printf("修改后a的值:%d\n", a); return 0; }

image
显而易见,a的值并未修改,因为main函数里的a和addNum里的a不是同一个a。如果要想修改它,那么我们可以把a的地址当做参数传给函数,这样我们就能在函数内成功修改a的值。

#include <stdio.h> void modify(int* p) { *p = 20; } int main(void) { int a = 10; printf("修改前a的值:%d\n", a); modify(&a); printf("修改后a的值:%d\n", a); return 0; }

image
成功修改a的值。传递地址能打破作用域的限制


__EOF__

本文作者若达萨罗
本文链接https://www.cnblogs.com/bcc0729/p/17554958.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   若达萨罗  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示