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

wordpress禁止收录连云港专业网站优化

wordpress禁止收录,连云港专业网站优化,福州网站建设方案咨询,具有品牌的微网站建设复习接上回C语言复习笔记--指针(1)-CSDN博客.今天进一步复习指针. 指针的使用和传址调用 strlen的模拟实现 库函数strlen的功能是求字符串⻓度,统计的是字符串中 \0 之前的字符的个数。 函数原型如下: size_t strlen ( const char * str ); //这…

        复习接上回C语言复习笔记--指针(1)-CSDN博客.今天进一步复习指针.

指针的使用和传址调用

  strlen的模拟实现

        库函数strlen的功能是求字符串⻓度,统计的是字符串中 \0 之前的字符的个数。

函数原型如下:  size_t strlen ( const char * str );        //这里就是要传指针

        下面我们来尝试自己模拟实现一下.

//strlen的模拟实现
size_t strlen1(char* a)
{size_t num = 0;while (*a){a++;num++;}return num;
}size_t strlen2(char* a)
{size_t num = 0;char* end = a;while (*end){end++;}return end - a;
}int main()
{char arr[] = "hello world";//printf("%zd\n", strlen11(arr));printf("%zd\n", strlen2(arr));    //数组名代表着数组首元素地址(之后会详细说return 0;
}

  传值调用和传址调用

        学习了指针就是要用指针解决问题,那什么问题,非指针不可呢?

        例如:写⼀个函数,交换两个整型变量的值

        在开始我们可能会写出一个经典的错误函数.如下

//用函数交换两个变量
void swap(int a, int b)
{int tmp = a;a = b;b = tmp;
}
int main()
{int a = 1;int b = 2;swap(a, b);printf("a=%d b=%d\n", a, b);return 0;
}

        这个代码的运行结果

        可以看出这个函数完全不会交换a和b这是为什么呢?因为形参是实参的临时拷贝,也就是说改变形参不会影响函数外的实参.更加深入的原因可以看下下面的博客.上面的swap函数在使⽤的时候,是把变量本⾝直接传递给了函数,这种调⽤函数的⽅式我们之前在函数的时候就知道了,这 种叫传值调用.

        这个时候指针就派上用场了.我们可以通过指针的解引用来在函数内部找到实参并且进行改变.改变后的函数见下.下面改进的调⽤swap函数的时候是将变量的地址传递给了函数,这种函数调⽤⽅式叫:传址调用.

        C语言复习笔记--函数栈帧创建与销毁-CSDN博客

//用函数交换两个变量
void swap(int* a, int* b)
{int tmp = *a;*a = *b;*b = tmp;
}
int main()
{int a = 1;int b = 2;swap(&a, &b);printf("a=%d b=%d\n", a, b);return 0;
}

        这时函数的输出结果就可以满足我们的希望了.

        结论:传址调⽤,可以让函数和主调函数之间建⽴真正的联系,在函数内部可以修改主调函数中的变量;所以函数中只是需要主调函数中的变量值来实现计算,就可以采⽤传值调⽤如果函数内部要修改主调函数中的变量的值,就需要传址调⽤.

        在之前我们复习了数组,这里我们又复习到了指针,那么可不可以将二者联系一下呢?下面我们从数组名来入手.

数组名的理解

       在上一个模块上我就提及了数组名是数组首元素的地址.下面我们来验证一下

        如上图所示,数组名是数组首元素的地址,但是这又不太对了,因为在之前运算数组元素的个数时,我们是用sizeof(数组名)/sizeof(数组任意元素)的.如果数组名是数组首元素的地址,那么这里理解释不通.

        其实数组名就是数组⾸元素(第⼀个元素)的地址是对的,但是有两个例外:

        1.sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表示整个数组,计算的是整个数组的⼤⼩, 单位是字节.

        2.&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的).(在指针加整数的方面可以体现出来,见下)

        除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。

        这里可以看出arr加1后跳了4个字节,而&arr+1后跳了20个字节(地址会以16进制来打印).

使用指针访问数组

int main()
{int arr[10] = { 0 };int sz = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数要在要运用的函数之前计算好,不能到函数内部在计算//因为传参之后数组就变为指针了(在下面传参本质会复习到)for (int i = 0; i < sz; i++){scanf("%d", arr + i);}for (int i = 0; i < sz; i++){printf("%d ", *(arr + i));}printf("\n");return 0;
}

        因为我们也可以使⽤arr[i]可以访问数组的元素,所以本质上arr[i] 是等价于 *(arr+i).数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移量求出元素的地址,然后解引⽤来访问的.

一维数组传参的本质

        数组是可以传递给函数的,下面我们讨论⼀下数组传参的本质.

         这就要学习数组传参的本质了,上个⼩节我们学习了:数组名是数组⾸元素的地址;那么在数组传参的时候,传递的是数组名也就是说本质上数组传参本质上传递的是数组⾸元素的地址。

        所以函数形参的部分理论上应该使⽤指针变量来接收⾸元素的地址。那么在函数内部我们写 sizeof(arr) 计算的是⼀个地址的⼤⼩(单位字节)⽽不是数组的⼤⼩(单位字节)。正是因为函 数的参数部分是本质是指针,所以在函数内部是没办法求的数组元素个数的。

        总结:⼀维数组传参,形参的部分可以写成数组的形式,也可以写成指针的形.

冒泡排序

        复习了很多,现在来运用一下.(冒泡排序在现实中没有什么太大的价值,所以不过多复习,可以看下代码)

void Pop_sort(int arr[], int sz)
{for (int i = 0; i < sz - 1; i++){int flag = 1;for (int j = 0; j < sz - i - 1; j++){if (arr[j] > arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;flag = 0;}}if (1 == flag){break;}}
}
void Print(int arr[], int sz)
{for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");
}
int main()
{int arr[10] = { 5,2,6,9,8,0,3,1,7,4 };int sz = sizeof(arr) / sizeof(arr[0]);Pop_sort(arr, sz);Print(arr, sz);return 0;
}

        以上就是今天的复习啦,我们下篇指针复习见


文章转载自:

http://JMxHucIH.tcpnp.cn
http://MMkihnMw.tcpnp.cn
http://Tp5LJQxo.tcpnp.cn
http://kdHu3DHg.tcpnp.cn
http://uPO58wc5.tcpnp.cn
http://VyxG5pwQ.tcpnp.cn
http://vuR1q1Zy.tcpnp.cn
http://ViQb7bnE.tcpnp.cn
http://hJci3xIe.tcpnp.cn
http://LTwU57WU.tcpnp.cn
http://IGZZao7h.tcpnp.cn
http://RrXSgsTj.tcpnp.cn
http://xYlPZRPh.tcpnp.cn
http://ctbwd3Ka.tcpnp.cn
http://wdL6SePA.tcpnp.cn
http://INOq7MF3.tcpnp.cn
http://G3WcMC58.tcpnp.cn
http://MLK9CbEj.tcpnp.cn
http://e0K4xLOF.tcpnp.cn
http://hzWdwVDo.tcpnp.cn
http://GxIHrsyB.tcpnp.cn
http://WXjMT0tJ.tcpnp.cn
http://TWYETxoz.tcpnp.cn
http://HKh6OteQ.tcpnp.cn
http://SPd4Kllj.tcpnp.cn
http://H024xzOj.tcpnp.cn
http://Z4ZXxeFf.tcpnp.cn
http://cyDv6Azd.tcpnp.cn
http://g9jZnJtn.tcpnp.cn
http://M91nYbOY.tcpnp.cn
http://www.dtcms.com/wzjs/771852.html

相关文章:

  • 淮安谁家做网站设计专业知名企业网站
  • 重庆电脑网站建设上海市场监督管理局
  • 南京协会网站建设wordpress商品插件
  • deals网站建设收到网站打入0.1元怎么做分录
  • 网站设计软件网站建设分为几个阶段
  • 提供服务好的网站归档系统电脑版浏览器网页入口
  • tomcat做静态网站品牌网站建设特色大蝌蚪
  • dz网站建设视频教程wordpress图床
  • 松江品划做网站公司wordpress自定义鼠标
  • 网站建设飠金手指科杰十五域名交易中心
  • p2p网站开发的流程图wordpress 自定义内容类型
  • 珠海网站设计价格一起装修网装修公司
  • 重庆江北区网站建设网站开发p6
  • 网站制作要用哪些软件有哪些wordpress 头条号
  • 网站的js效果代码大全微网站建设包含
  • 海淀西北旺网站建设wordpress 微博图床
  • 腾讯云服务器centos做静态网站论坛程序
  • 精美化妆品网站模板百度怎么搜索关键词
  • 网站域名备案服务号个人网站下载
  • 财经大学网站建设wordpress建站百科
  • 兼职网站编程杭州网站建设官方蓝韵网络
  • 论坛网站建设费用网站如何添加二维码
  • 郑州做营销型网站建设网站恶意点击
  • 济南网站建设方案报价北京网站建设报价表
  • 李青青做网站 公司主要做应用领域三个字的公司名称精选
  • 百度的网站关键词被篡改网站建设ppt方案模板
  • 建设电影网站算盗版吗设计本笔记本推荐
  • 做网站违法网站搭建 成都
  • 做网站没什么用啊老师别人强重庆市建设工程信息网行业协会
  • jimdo和wordpress昭通网站seo