当前位置: 首页 > news >正文

西安网站建设成功建设推广产品的方法

西安网站建设成功建设,推广产品的方法,中山专业门户网站制作策划,网站面包屑导航设计特点#x1f308;write in front :#x1f50d;个人主页 #xff1a; 啊森要自信的主页 真正相信奇迹的家伙#xff0c;本身和奇迹一样了不起啊#xff01; 欢迎大家关注#x1f50d;点赞#x1f44d;收藏⭐️留言#x1f4dd;希望看完我的文章对你有小小的帮助#x… write in front :个人主页 啊森要自信的主页 真正相信奇迹的家伙本身和奇迹一样了不起啊 欢迎大家关注点赞收藏⭐️留言希望看完我的文章对你有小小的帮助如有错误可以指出让我们一起探讨学习交流一起加油鸭。 文章目录 前言▶️、 数组名的理解▶️、 使⽤指针访问数组➡️、⼀维数组传参的本质➡️、⼆级指针、指针数组️总结 前言 本小节我们继续深入理解指针阿森将在本小节带你理解数组名怎么使用指针访问数组一维数组传参的本质冒泡排序的方法还有我们的二级指针创建指针数组的生命创建和运用。接下来让我们启程 ▶️、 数组名的理解 %d用于打印整数。%f用于打印浮点数。%c用于打印单个字符。%s用于打印字符串。%p用于打印指针地址。%x用于以十六进制格式打印整数。%o用于以八进制格式打印整数。%e用于以科学计数法打印浮点数。%u用于以无符号整数格式打印整数。 对于数组名我们在学习函数的时候我们就了解到数组名arr就是数组首元素的地址,当然也可以取地址数组首元素arr[0]. #include stdio.h int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf(arr[0]%p\n, arr[0]);//数组首元素printf(arr %p\n, arr);//数组名return 0; }运行结果 我们看到运行结果可以看出数组名和数组首元素的地址一模一样。因此数组名就是数组首元素第一个元素的地址。 既然arr是是首元素的地址那sizeofarr计算的也应该是计算的是数组首元素的大小单位字节。那么他应该计算的是首元素的大小也就是4或者8因为分别是32位或64位环境事实真的如此吗 sizeof是一个运算符用于获取数据类型或变量的大小以字节为单位。它的语法如下 sizeof(type) sizeof(variable)其中type可以是任何数据类型比如int、char、float等而variable可以是任何变量名。 sizeof返回的是一个size_t类型的值表示对应类型或变量所占用的字节数。在实际编程中sizeof经常用于在程序中动态计算数组的大小或者确保在处理内存分配和复制时不会出现越界的情况。 其实不然并没有打印我们想要的 那这怎么解释呢 输出的结果是40如果arr是数组⾸元素的地址那输出应该的应该是4/8才对。 其实数组名就是数组⾸元素(第⼀个元素)的地址是对的但是有两个例外 1️⃣ sizeof(数组名)sizeof中单独放数组名这⾥的数组名表⽰(整个数组)计算的是整个数组的⼤⼩单位是字节2️⃣ 数组名这⾥的数组名表⽰整个数组取出的是整个数组的地址整个数组的地址和数组⾸元素的地址是有区别的 除此之外任何地⽅使⽤数组名数组名都表⽰⾸元素的地址。 #include stdio.h int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf(%d\n, sizeof(arr));printf(%p\n, arr[0]);printf(%p\n, arr);printf(%p\n, arr);return 0; }运行结果 打印结果⼀模⼀样这时候⼜纳闷了那arr和arr有啥区别呢 #include stdio.h int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf(arr[0] %p\n, arr[0]);printf(arr[0]1 %p\n, arr[0] 1);printf(arr %p\n, arr);printf(arr1 %p\n, arr 1);printf(arr %p\n, arr);printf(arr1 %p\n, arr 1);return 0; }这⾥我们发现arr[0]和arr[0]1相差4个字节arr和arr1 相差4个字节是因为arr[0] 和 arr 都是⾸元素的地址1就是跳过⼀个元素。 但是arr 和 arr1相差40个字节这就是因为arr是数组的地址1 操作是跳过整个数组的。 在C语言中arr和arr有着不同的含义和用法。 arr表示数组的名称它代表数组的首元素的地址。在大多数情况下当使用数组名arr时它会被隐式转换为指向数组第一个元素的指针。因此arr表示的是数组的地址而不是整个数组的内容。 arr表示对整个数组的取地址操作。它得到的是整个数组的地址而不是数组的第一个元素的地址。因此arr表示的是整个数组的地址而不是数组的内容。 总结来说arr表示数组的首元素地址而arr表示整个数组的地址。在大多数情况下当我们需要传递数组给函数时实际上传递的是数组的首元素地址因此arr和arr在传递参数时的用法可能会有所不同。 ▶️、 使⽤指针访问数组 知道了数组名数组的地址那我们不就可以用指针访问数组了遍历数组的元素了好接下来启动 #include stdio.h int main() {int arr[10] { 0 };//输⼊int i 0;//整个数组大小40/单个数组字节410int sz sizeof(arr) / sizeof(arr[0]);//计算数组元素个数//输⼊int* p arr;printf(请输入数组元素:\n);for (i 0; i sz; i){/*scanf(%d, p i);*///p每一次移动 i 个地址scanf(%d, arri);//既然数组名是首元素地址理所应当也可以这样写//scanf(%d, arr[0] i);//那第一个地址也可以}//输出printf(输出:\n);for (i 0; i sz; i){printf(%d , *(p i));//解引找到指针变量的空间的值进行访问}return 0; }每个都进行验证一下 数组名访问地址 数组首元素地址访问 3. 使用指针访问数组 ⚠️ 这段代码弄清楚后我们再试一下如果我们再分析一下数组名arr是数组首元素的地址可以赋值给p其实数组名arr和p在这里是等价的。那我们可以使用arr[i]可以访问数组的元素那p[i]是否也可以访问数组呢测试一下 #include stdio.h int main() {int arr[10] { 0 };//输⼊int i 0;//整个数组大小40/单个数组字节410int sz sizeof(arr) / sizeof(arr[0]);//计算数组元素个数//输⼊int* p arr;printf(请输入数组元素:\n);for (i 0; i sz; i){/*scanf(%d, p i);*///p每一次移动 i 个地址scanf(%d, arri);//既然数组名是首元素地址理所应当也可以这样写//scanf(%d, arr[0] i);//那第一个地址也可以}//输出printf(输出:\n);for (i 0; i sz; i){printf(%d , i[arr]);//这样子是否也可以呢printf(%d , i[p]);//}return 0; }哎为什么i[arr]可以打印其实i[p]也可以打印 在C语言中数组名和指针的运算符[]是可以互换使用的。这是因为在C语言中a[b]和*(a b)是等价的即数组下标运算和指针运算是等效的。当然如果你不太明白可以尝试使用交换律来理解 *(iarr)--*(arri)--arr[i]arr[i] *(arri)*(iarr) i[arr]p[i] *(pi)因此当你使用i[arr]时它实际上等同于arr[i]。这是因为arr本身就代表数组的首元素地址而i[arr]会被解释为*(arr i)即数组首元素地址加上偏移量i得到第i个元素的地址。同样i[p]也等同于p[i]因为指针p也可以进行类似的偏移量运算。虽然i[arr]和i[p]在语法上是合法的但通常不推荐这样的写法因为它会增加代码的可读性和理解难度。更好的做法是直接使用arr[i]和p[i]这样可以更清晰地表达代码的意图。 ➡️、⼀维数组传参的本质 首先让我们从一个问题开始。我们之前一直在函数外部计算数组的元素个数但是我们能否将函数传递给另一个函数在函数内部计算数组的元素个数呢 void test(int arr[])//int* arr { //4/4int sz sizeof(arr) / sizeof(arr[0]);printf(%d\n, sz);// }int main() {//数组传参的时候传递的是并非是数组//传递的是数组首元素的地址int arr[12] { 1,2,3,4,5,6,7,8,9,10,11,12 };int sz sizeof(arr) / sizeof(arr[0]);test(arr);//这里的数组名就是数组首元素的地址return 0; }环境下debug,x86环境下结果为1. 环境下debug,x64环境下结果为2. 分析 当数组作为函数参数进行传递时实际上传递的是数组的首元素地址而不是整个数组。因此在函数内部无法通过sizeof操作符来获取数组的大小因为此时的arr已经退化为指针。 在代码中test函数的参数arr实际上是一个指针因此在函数内部使用sizeof(arr)并不能得到数组的大小而是得到指针的大小。因此在32位环境下x86指针的大小为4字节所以sizeof(arr) / sizeof(arr[0])的结果为1。同理64位指针大小字节为8字节 数组名是数组首元素的地址因此在数组传参时传递的是数组名也就是说本质上数组传参本质上传递的是数组首元素的地址。 ⼀维数组传参形参的部分可以写成数组的形式也可以写成指针的形式。 ➡️、⼆级指针 指针变量也是变量是变量就有地址那指针变量的地址存放在哪⾥ 在C语言中二级指针是指一个指针变量它存储的是另一个指针变量的地址。换句话说它指向一个指针变量而这个指针变量又指向某个数据的地址。在C语言中我们通常使用二级指针来处理动态内存分配和多级数据结构。 下面是一个简单的示例演示了如何声明和使用二级指针 #include stdio.hint main() {int num 10;int *ptr1 num; // 一级指针指向int类型的数据int **ptr2 ptr1; // 二级指针指向int*类型的数据// 通过二级指针访问num的值printf(Value of num: %d\n, **ptr2);return 0; }在这个示例中ptr1是一个一级指针它指向一个整数类型的数据num。ptr2是一个二级指针它指向一个一级指针ptr1。通过**ptr2可以访问num的值。 二级指针在C语言中通常用于动态内存分配例如在使用malloc函数分配内存时可以返回一个指向指针的指针以便在程序中对内存进行操作。此外在处理多级数据结构如多级指针数组或多级链表时二级指针也非常有用。 举个简单的例子 int main() {int a 10;int* p a;//取出a的地址//p是指针变量是一级指针int * * pp p;//pp是二级指针return 0; }对于⼆级指针的运算有 • *ppa 通过对ppa中的地址进⾏解引⽤这样找到的是 pa *ppa 其实访问的就是 pa . int b 20; *ppa b;//等价于 pa b;• **ppa 先通过 *ppa 找到 pa ,然后对 pa 进⾏解引⽤操作 *pa 那找到的是 a . **ppa 88; //等价于*pa 88; //等价于a 88;、指针数组 指针数组是指针还是数组 我们类⽐⼀下整型数组是存放整型的数组字符数组是存放字符的数组。 那指针数组呢是存放指针的数组。 在C语言中指针数组是一个数组其中的每个元素都是一个指针。这意味着每个数组元素都存储着另一个变量的地址而这个变量可以是任何类型的数据包括整数、浮点数、字符甚至是其他指针。 下面是一个简单的示例演示了如何声明和使用指针数组 #include stdio.hint main() {int num1 10, num2 20, num3 30;int *ptrArr[3]; // 声明一个包含3个指针的数组ptrArr[0] num1; // 将num1的地址存储在数组的第一个元素中ptrArr[1] num2; // 将num2的地址存储在数组的第二个元素中ptrArr[2] num3; // 将num3的地址存储在数组的第三个元素中// 通过指针数组访问num1、num2和num3的值printf(Value of num1: %d\n, *ptrArr[0]);printf(Value of num2: %d\n, *ptrArr[1]);printf(Value of num3: %d\n, *ptrArr[2]);return 0; }在这个示例中ptrArr是一个包含3个指针的数组。每个数组元素都存储着一个整数类型变量的地址。通过ptrArr[i]可以访问第i个元素所指向的变量。 int main() { //char ch ‘w’; //char* pc ch;//pc就是字符指针 const char* p abcdef;//不是把字符串abcdef\0存放在p中而是把第一个字符的地址存放在p中 //printf(%c\n, *p);// //1. 你可以把字符串想象为一个字符数组但是这个数组是不能修改的 //2. 当常量字符串出现在表达式中的时候他的值是第一个字符的地址printf(%c\n, abcdef[3]); printf(%c\n, p[3]); //p[3] q;//errreturn 0;} 在C语言中字符指针数组是一个数组其中的每个元素都是一个指向字符的指针。这种数组通常用于存储字符串数组其中每个元素指向一个以null结尾的字符数组。 下面是一个简单的示例演示了如何声明和使用字符指针数组 #include stdio.hint main() {char *strArr[3]; // 声明一个包含3个字符指针的数组strArr[0] Hello; // 将指向字符串Hello的指针存储在数组的第一个元素中strArr[1] World; // 将指向字符串World的指针存储在数组的第二个元素中strArr[2] C; // 将指向字符串C的指针存储在数组的第三个元素中// 通过字符指针数组访问存储的字符串printf(String 1: %s\n, strArr[0]);printf(String 2: %s\n, strArr[1]);printf(String 3: %s\n, strArr[2]);return 0; }在这个示例中strArr是一个包含3个字符指针的数组。每个数组元素都存储着一个指向以null结尾的字符数组的指针。通过strArr[i]可以访问第i个元素所指向的字符串。 但是也有例外 比如这个代码 int main() { //char ch ‘w’; //char* pc ch;//pc就是字符指针 const char* p abcdef;//不是把字符串abcdef\0存放在p中而是把第一个字符的地址存放在p中 //printf(%c\n, *p);// //1. 你可以把字符串想象为一个字符数组但是这个数组是不能修改的 //2. 当常量字符串出现在表达式中的时候他的值是第一个字符的地址printf(%c\n, abcdef[3]); printf(%c\n, p[3]); //p[3] q;//errreturn 0;} 如果强行修改他就会报错 ️总结 本小节我们的学习总结 1️⃣. 数组名的理解 数组名实际上是指向数组第一个元素的指针。在大多数情况下数组名可以被解释为指向数组首元素的指针常量。例如对于int arr[5]arr可以被视为指向arr[0]的指针。 2️⃣. 使用指针访问数组 数组名可以被解释为指向数组首元素的指针因此可以使用指针算术或指针解引用来访问数组元素。例如*(arr i)或者arr[i]都可以用来访问数组arr的第i个元素。 3️⃣. 一维数组传参的本质 在C语言中当将数组传递给函数时实际上传递的是数组的首元素的地址。因此函数参数声明中的数组形参实际上被解释为指向数组首元素的指针。 4️⃣. 二级指针 二级指针是指向指针的指针。它们用于处理指针的指针通常用于动态内存分配和多级数据结构。例如int **ptr是一个指向指向整数的指针的指针。 5️⃣. 指针数组 指针数组是一个数组其中的每个元素都是一个指针。这些指针可以指向不同类型的数据包括其他指针。例如int *ptrArr[5]是一个包含5个整数指针的数组。 感谢你的收看如果文章有错误可以指出我不胜感激让我们一起学习交流如果文章可以给你一个帮助可以给博主点一个小小的赞
http://wiki.neutronadmin.com/news/353047/

相关文章:

  • 深圳做网站网络营销公司哪家好无线网站应建设在什么地方
  • 陕西省交通集团建设网站wordpress 评论框主题
  • 设计师网站prinest建筑业企业
  • 做商城网站哪家好晋中市住房与城乡建设厅网站
  • 长春站建筑网站上传文件
  • 网站式小程序flash做网站通栏
  • 网站添加备案信息网页制作培训苏州
  • 网站自己建机房深圳网站开发工程师
  • 网站建设实例下载wordpress目录只显示第一个图片
  • 怎么做网站管理系统seo如何分析网站
  • 牛街网站建设网站邮件系统建设招标
  • 第三方商城网站建设网站没有收录了
  • 可以不花钱做网站吗视频直播源码
  • 一流的镇江网站建设魔贝课凡seo课程好吗
  • 建设工程学部研究生培养网站湖南常德邮编
  • 腾讯云建站流程2023年10月爆发新冠
  • 福步外贸网站wordpress如何修改模板
  • 网站优化分析wordpress更好用吗
  • 网络建设网站有关知识高端轻奢品牌
  • 网站 整站 抓取深圳网站建设公司流程
  • 制定网站建设规划书软件推广简报
  • 中国国防新闻兰州企业网络推广优化
  • 企业网站模板 首页大图企业信息查询网官网
  • 长沙公司建设网站公司名字大全最新
  • 网站后台管理怎么进衡水精品网站建设价格
  • 天津百度关键词排名外贸网站建设seo优化
  • 中石油技术开发公司网站东莞做网站注意事项
  • 301的网站用什么来做连锁租车网站源码
  • 广州网站建设性价比网站域名查主机
  • 阿里云建立网站培训机构图片