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

东莞比较出名的网站建设公司网站模板侵权问题

东莞比较出名的网站建设公司,网站模板侵权问题,湖州网站建设培训,阿里云服务器可以做商业网站目录 前言#xff1a; 指针详解 前言#xff1a; 1.CSDN由于我的排版不怎么好看#xff0c;我的有道云笔记比较美观#xff0c;请移步有道云笔记 2.修炼必备 1#xff09;入门必备#xff1a;VS2019社区版#xff0c;下载地址#xff1a;Visual Studio 较旧的下载 -…目录 前言 指针详解 前言 1.CSDN由于我的排版不怎么好看我的有道云笔记比较美观请移步有道云笔记 2.修炼必备 1入门必备VS2019社区版下载地址Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com) 2趁手武器印象笔记/有道云笔记 3修炼秘籍牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推求职就业一站解决_牛客网 (nowcoder.com) 4雷劫必备leetcode 力扣LeetCode官网 - 全球极客挚爱的技术成长平台  注遇到瓶颈怎么办百度百科_全球领先的中文百科全书 (baidu.com) 指针详解 ——指针是C语言中最核心的部分不了解指针就掌握不了C语言的精髓 1.指针是什么 1指针是内存中一个最小单元的编号即指针就是地址 2指针变量是用来存放内存地址的变量 图解 ​ 2.我们如何取出变量的地址 ——使用符号取出变量的地址使用相应数据类型的指针变量保存该地址 #include stdio.hint main() {int num 10;int* p num;//取出了num的地址赋给了p//打印查看地址printf(num %p\n, num);printf(p %p\n, p);return 0; } 运行结果 ​ 3.指针的大小 ——32位平台下的指针大小是4个字节64位的平台下指针的大小是8个字节 #include stdio.hint main() {printf(%d\n, sizeof(char*));printf(%d\n, sizeof(short*));printf(%d\n, sizeof(int*));printf(%d\n, sizeof(long*));printf(%d\n, sizeof(long long*));printf(%d\n, sizeof(float*));printf(%d\n, sizeof(double*));return 0; } 32位平台运行结果 64位平台运行结果  4.指针和指针类型 1指针的定义的方式 a.指针的定义方式数据类型*         char*字符指针         int*整型指针         long long*长长整型指针         float*单精度指针         double*双精度指针 b.一般情况下那种类型的指针则存储那种类型变量的地址 #include stdio.hint main() {char c a;int num 10;float f 1.342;double data 13.14;//一般情况那种类型的指针变量存储那种类型变量的地址char* ch c;int* p num;float* p1 f;double* p2 data;return 0; } 2指针的类型决定了指针向前或向后走一步有多大的字节距离 #include stdio.hint main() {char c c;int num 10;char* p1 c;int* p2 num;printf(%p\n, p1);printf(%p\n, p11);printf(%p\n, p2);printf(%p\n, p21);return 0; } 运行结果 3指针的类型决定了指针在解引用的时候能操作几个字节【访问权限多大】  #include stdio.hint main() {int num 0x44332211;char* p1 num;int* p2 num;printf(%d\n, *p1);printf(%d\n, *p2);*p1 0;*p2 0;return 0; } 调试查看结果 5. 野指针的问题 野指针就是指针指向的位置是不可知的【随机、不正确、无限制】 1指针未初始化 #include stdio.hint main() {int* p;printf(%p\n, p);return 0; } 运行结果  2指针越界访问  #include stdio.hint main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p arr;for (int i 0; i 11; i){//p的访问范围超过了数组的下标范围p就是野指针printf(%d , *p);p;}return 0; } 3返回局部变量的地址 #include stdio.h int test() {int a 10;return a; }int main() {int *p test();return 0; } 4指针指向的空间未释放 6.防止野指针的问题 1指针初始化 2小心指针越界 3指针指向空间释放及时置为NULL 4避免返回局部变量的地址 5使用指针之前检查指针的有效性 #include stdio.hvoid test(int* p) {//检查指针的有效性if(p NULL){} }int main() {int* p NULL;//不知道指针指向哪里的时候置为NULLtest(p);return 0; } 7.指针运算 1指针-整数 #include stdio.hint main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p;for (p arr; p arr[10]; p){printf(%d , *p);}return 0; } 2指针-指针【地址-地址】 两个指针指向的是同一块空间且类型是一致的两者相减得到是元素个数 #include stdio.hint main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p1 arr;int* p2 arr[10];//指针-指针printf(%d\n, p2 - p1);//10return 0; } 3指针的关系运算 #include stdio.hint main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p;for (p arr[10]; p arr[0];){*--p 0;}return 0; } 为什么这种方法也可以但是不使用呢 #include stdio.hint main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p;for (p arr[9]; p arr[0]; p--){*p 0;}return 0; } C语言中的标准规定允许指向数组元素的指针能与指向数组最后一个元素的后面那个内存位置的指针比较但不允许与数组元素第一个元素前面的那一个内存地址的指针比较 8.指针与数组 1数组名是数组首元素的地址数组名是取出整个数组的地址 #include stdio.hint main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p arr;printf(arr %p\n, arr);printf(arr 1 %p\n, arr 1);printf(arr %p\n, arr);printf(arr 1 %p\n, arr 1);return 0; } 运行结果 2指针能指向数组的任意一个元素即数组每个元素的地址指针均能获取  #include stdio.hint main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p arr;for (int i 0; i 10; i){printf(%p %p\n, arr[i], pi);}return 0; } 运行结果 9.二级指针【指针的指针】  int num 10; int* p num;//*p代表这是指针int表示指向的类型是int类型 int**pp p;//*pp代表是指针int*表示指向的类型是int*类型 #include stdio.hint main() {int num 10;int* p num;//*p表示这是一个指针指向的类型是intint** pp p;//*pp表示这是一个指针指向的类型是int*printf(%d\n, num);//10printf(%d\n, *p);//10printf(%d\n, **pp);//10return 0; } 10.字符指针的使用方式 1字符指针指向一个字符变量 2字符指针指向一个常量字符串【常量字符串的首元素地址赋给字符指针】 #include stdio.hint main() {char ch a;//字符指针指向一个字符变量char* p1 ch;printf(%c\n, *p1);//字符指针指向一个常量字符串char* p2 abcdef;printf(%c\n, *p2);printf(%s\n, p2);return 0; } 运行结果  一道简单的笔试题: #include stdio.hint main() {char str1[] abcdef;char str2[] abcdef;const char* arr1 abcdef;const char* arr2 abcdef;if (str1 str2){printf(str1 and str2 are same\n);}else{printf(str1 and str2 are not same\n);}if (arr1 arr2){printf(arr1 and arr2 are same\n);}else{printf(arr1 and arr2 are not same\n);}return 0; } 运行结果 为什么当const char*是存储字符串常量的时候两个指针均指向字符串常量首元素地址 11.指针数组【数组】 整型数组数据是整型的数组 浮点数组数据是浮点型的数组 指针数组数据是指针的数组【即数组中的元素是指针类型】 图解三种数组类型 #include stdio.hint main() {int arr1[5] { 1,2,3,4,5 };int arr2[5] { 2,3,4,5,6 };int arr3[5] { 3,4,5,6,7 };int* arr[3] { arr1,arr2,arr3 };//存储了三个数组的首元素地址for (int i 0; i 3; i){for (int j 0; j 5; j){printf(%d , *(arr[i] j));//arr[i][j]}printf(\n);}return 0; } 运行结果 12.数组指针【指针】 ——指向数组的类型 (*p)[大小] 所指数组名 int num 10; int* p num;//指向int的指针 double data 13.14; double* p data;//指向double的指针 int arr[10]; int (*p)[10] arr;//指向数组的指针 ——如何判断数组指针 ()的结合性比[]高,所以先与*()里面的*号结合再与[]结合 - 指针 #include stdio.hvoid printArr(int(*p)[5], int row, int col) {for (int i 0; i row; i){for (int j 0; j col; j){//printf(%d , p[i][j]);//printf(%d , *(*(p i) j));printf(%d , *(p[i] j));}printf(\n);} }int main() {int arr[3][5] { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };int row sizeof(arr) / sizeof(arr[0]);int col sizeof(arr[0]) / sizeof(arr[0][0]);printArr(arr, row, col);return 0; } 13.数组传参和指针传参 1一维数组传参 #include stdio.h//一维数组传参 //传参方式1 void test(int arr[]){} //传参方式2 void test1(int arr[10]){} //传参方式3 void test2(int* arr){}//一维指针数组传参 //传参方式1 void demo1(int* p[10]){} //传参方式2 void demo2(int** arr){} //解释*arr接收str数组另一个*表示元素是指针int main() {int arr[5] { 0 };test(arr);test1(arr);test2(arr);//一维指针数组传参int* str[10] { 0 };demo1(str);demo2(str);return 0; } 2二维数组的传参方式 #include stdio.h//传参方式1 void test(int arr[3][3]){} //传参方式2 void test1(int arr[][3]){} //传参方式3 void test2(int(*arr)[3]){}int main() {int arr[3][3] { 0 };test(arr);test1(arr);test2(arr);return 0; } 3一级指针传参 #include stdio.h //传参方式1 void test(int* p){} //传参方式2 void test1(int* *p){}int main() {int* p NULL;test(p);return 0; } 4二级指针传参 #include stdio.hvoid test(int** p) {}int main() {int** p NULL;test(p);return 0; } 14.函数指针 ——指向的函数返回值 (*p)(指向函数的形参) 所指函数名 int* p; //指向int的指针 double* p; //指向double的指针 int (*p)(int,int);//指向函数的指针 //解答*和p结合说明是指针然后和(int,int)结合说明是函数int是返回值 #include stdio.hint add(int x, int y) {return x y; }int main() {//函数是有地址的//printf(%p\n, add);int (*p)(int, int) add;int ret p(5, 3);printf(%d\n, ret);//8return 0; } 思考以下代码 //代码1 (*(void (*)())0)(); //代码2 void (*signal(int , void(*)(int)))(int); 解释 代码1把0强制转为为void(*)()的函数指针,在0地址处有一个函数 函数无返回值无形参这个地方表调用代码2函数名是signal参数为int和函数指针void(*)(int) signal的返回类型是函数指针该函数指针的函数返回值是void参数是int 15.函数指针数组 ——把函数地址存储在数组里面这个数组就叫做函数指针数组 int (*p[])(形参); ——使用途径转移表 #include stdio.hint Add(int x, int y) {return x y; } int Sub(int x, int y) {return x - y; } int Mul(int x, int y) {return x * y; } int Div(int x, int y) {return x / y; }void menu() {printf(******************************\n);printf(**** 1. add 2.sub *****\n);printf(**** 3. mul 4.div *****\n);printf(**** 0. exit *****\n);printf(******************************\n); }int main() {int input 0;int x 0;int y 0;int ret 0;//转移表 - 函数指针的数组int (*pfArr[])(int, int) { NULL, Add, Sub, Mul, Div };//0 1 2 3 4do{menu();printf(请选择:);scanf(%d, input);if (input 0){printf(退出计算器\n);break;}else if (input 1 input 4){printf(请输入两个操作数:);scanf(%d %d, x, y);ret pfArr[input](x, y);printf(%d\n, ret);}else{printf(选择错误\n);}} while (input);return 0; }
http://www.hkea.cn/news/14354403/

相关文章:

  • 怎么用ps做网站首页字电子商务网站类型
  • 站长工具查询视频电子商务网站模块
  • 有没有做微信的动态图网站wordpress落地页改造
  • 佛山网站建设怎么选择浙江城乡住房建设厅网站首页
  • 语言网站建设莱芜新闻联播回放
  • 网站不用模板如何更新文章建成学校网站
  • 怀化订水网站专门做奢侈品的网站有哪些
  • 设计师喜欢的购物网站设计工作室的名字
  • 手机网站建设需求怎么在自己的网站上做漂浮链接
  • cms建站系统免费做今网站
  • 网站建设软文旅游网页代码模板
  • 胶州经济技术开发区 建设局 网站做任务赚佣金的网站
  • 北京移动网站建设公司排名win7主机做网站
  • 影视传媒网站源码企业网页开发
  • 大气的企业网站源码宁波网站排名优化报价
  • 凡科网站 怎么开支付wordpress 官网模板
  • 潍坊网站建设熊掌号怎样查看wordpress用的什么主题
  • 安庆市住房和城乡建设局网站首页做网站上传那个目录
  • 一级a做爰网站中国佛山自助建站软件
  • 广州制作公司网站的公司免费网站建站排行榜
  • 网站建设月薪做写字楼的网站有哪些资料
  • 建设集团网站价格各大网址收录查询
  • html中文网站作业南通住房和城乡建设厅网站
  • 怎么做提升自己的网站做一的同志小说网站有哪些
  • 提高网站注册率做网站大概需要几步
  • wordpress制作企业汨罗网站seo
  • 制作一个动态企业网站app制作平台灼灼琉璃夏漫画
  • 国字型网站建设布局用php做网站的优势
  • 做网站广告网页哈尔滨网站建设网络优化
  • 域名空间网站推广金华网站制作推广