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

网站每年多少钱深圳app开发怎么选

网站每年多少钱,深圳app开发怎么选,口碑好的网站建设价格,设计网站推荐设计酷站大家好#xff0c;这里是小编的博客频道 小编的博客#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识#xff0c;希望能在这里与大家共同进步#xff0c;共同收获更好的自己#xff01;#xff01;#xff01; 本文目录 引言正文#xff08;1#xff09;内置数… 大家好这里是小编的博客频道 小编的博客就爱学编程 很高兴在CSDN这个大家庭与大家相识希望能在这里与大家共同进步共同收获更好的自己 本文目录 引言正文1内置数据类型指针2 自定义类型指针1.数组指针与指针数组2. 结构体指针3.联合体指针1联合体指针的定义2联合体指针的使用3联合体指针的注意事项 3函数指针1.函数指针的定义2.函数指针的赋值3.函数指针的使用4.函数指针作为参数5.函数指针作为返回值6.函数指针的注意事项 4空指针NULL1空指针的使用2空指针与空字符3空指针的注意事项 5二级指针1二级指针的定义2二级指针的内存分配3二级指针的使用4二级指针作为函数参数5二级指针的注意事项 6常量指针与指向常量的指针const 的用法1.指向常量的指针Pointer to a Constant2.常量指针Constant Pointer3.常量指针指向常量Constant Pointer to a Constant4.使用场景和注意事项 题集1指针笔试题12指针笔试题23指针笔试题34指针笔试题45指针笔试题56指针笔试题67指针笔试题78指针笔试题89指针笔试题9 快乐的时光总是短暂咱们下篇博文再见啦不要忘了给小编点点赞和收藏支持一下在此非常感谢 引言 指针作为C语言语法学习中的一块既极重要又极难懂的知识点让初学C语言的我们常常苦不堪言。而本文就是为了让像曾经的作者一样的宝子们深刻理解指针这一章节的内容而作那接下来就跟随作者的视角一起把各种类型的指针理解透彻 那接下来就让我们开始遨游在知识的海洋 正文 指针的类型繁复为了避免出现知识点的遗漏这里小编采根据指向的内容进行分类把指针分为了以下6种。让我们一一来学习吧 内置类型数据是我们最为常用的数据类型所以指针的学习我们就从它开始。 1内置数据类型指针 顾名思义这些指针指向内置类型的变量如整型指针字符指针等。 详见 类型内涵及应用整型指针int*指向整数的指针浮点型指针float* double*指向浮点数的指针字符型指针char*指向字符的指针常用于字符串处理布尔型指针bool*指向布尔值的指针 其次就是自定义类型指针一起来看看吧 2 自定义类型指针 自定义类型数据类型有数组结构体枚举联合体。但是枚举没有对应的枚举指针变量。 这里小编先从数组与指针开始讲起。 1.数组指针与指针数组 数组指针和指针数组是C编程中两个重要的概念它们虽然名字相似但含义和用法却有很大的不同。我们先来看看这两个的定义 数组指针指的是指向数组的指针。它是一个指针指向一个数组类型的数据。声明一个数组指针时需要指定数组的元素类型和大小。例如int (*arrayPtr)[10]表示一个指向包含10个整数的数组的指针。使用数组指针时可以通过(*arrayPtr)[index]来访问数组中的元素。 指针数组则是指存储指针的数组。它是一个数组其中的每个元素都是指针。声明指针数组时需要指定数组的大小和指针指向的类型。例如int *pointerArray[10]表示一个包含10个指向整数的指针的数组。访问指针数组中的元素可以直接使用pointerArray[index]然后通过解引用来访问指针指向的数据。 主要区别在于它们的使用场景和内存布局。 数组指针通常用于函数参数以传递多维数组而指针数组则常用于创建动态的数据结构如链表和树。 在内存中数组指针指向的是连续的内存块而指针数组中的每个指针可以指向任意位置的内存。因此数组指针在内存访问上更为高效而指针数组则在数据组织上更为灵活。 总之理解数组指针和指针数组的区别对于编写高效的C语言程序至关重要。掌握它们各自的特性和适用场景可以帮助我们更好地设计和实现程序。 2. 结构体指针 定义结构体指针允许我们通过指针来访问和操作结构体中的数据。结构体是一种复合数据类型它允许我们将多个不同类型的数据项组合成一个单一的类型。结构体指针则是指向这种复合数据类型的指针。 在C中结构体指针的声明方式是在结构体类型的前面加上一个星号。例如如果有一个名为Person的结构体声明一个指向该结构体的指针可以写作Person *ptr;。这个指针可以用来指向一个Person类型的结构体实例。 我们以一个代码为例 #includestdio.h struct book {char name[20];char author[20];int prince; }; void print(struct book* p) {printf(%s %s %d\n, (*p).name, (*p).author, (*p).prince);printf(%s %s %d\n, p-name, p-author, p-prince); //“-”操作符可用在结构体指针指向我们想要访问的结构体中的元素 }int main() {struct book b1 {C语言, 张三, 10};printf(%s %s %d\n, b1.name, b1.author, b1.prince); //“.”操作符可用在找到我们想要访问的结构体的元素。print(b1);return 0; }这里的struct book* p就是一个结构体指针变量 主要优点是它们提供了一种通过内存地址间接访问和修改结构体成员的方法。这在处理大型数据结构时尤其有用因为它们可以减少内存复制提高程序的效率。 使用结构体指针时我们可以通过箭头操作符-来访问结构体的成员。例如如果Person结构体有一个名为name的成员我们可以通过ptr-name来访问或修改它。 结构体指针也常用于动态内存分配。使用new关键字可以动态创建结构体实例并返回指向该实例的指针。例如Person *ptr new Person;会创建一个新的Person结构体并使ptr指向它。当不再需要这个结构体时应该使用delete来释放内存避免内存泄漏。 结构体指针还可以作为函数参数允许函数直接修改传入的结构体实例。这在设计模块化和可重用代码时非常有用因为它允许函数与调用者共享数据而无需复制整个结构体。 总之结构体指针提供了一种高效、灵活的方式来访问和操作结构体数据是编写高效、模块化代码的关键。理解结构体指针的工作原理和正确使用它们对于任何C/C程序员来说都是一项基本技能。 3.联合体指针 联合体Union指针是指向联合体类型的指针。联合体是一种特殊的数据结构允许在相同的内存位置存储不同的数据类型。这使得联合体成为一种节省空间的数据类型因为联合体的大小等于其最大成员的大小而不是所有成员的总和。 1联合体指针的定义 在C/C中联合体指针的声明方式是在联合体类型的前面加上一个星号。例如如果有一个名为Data的联合体声明一个指向该联合体的指针可以写作Data *ptr;。这个指针可以用来指向一个Data类型的联合体实例。 2联合体指针的使用 使用联合体指针时我们可以通过箭头操作符-来访问联合体的成员。例如如果Data联合体有一个名为num的成员我们可以通过ptr-num来访问或修改它。 联合体指针的使用特点 内存共享联合体指针允许我们通过指针访问联合体成员这些成员共享相同的内存位置。这意味着对一个成员的修改会影响其他成员。 类型安全尽管联合体可以存储不同类型的数据但使用联合体指针时编译器会根据联合体的声明来检查成员访问的类型安全。 动态内存分配与结构体类似联合体指针也常用于动态内存分配。使用new关键字可以动态创建联合体实例并返回指向该实例的指针。 灵活性联合体指针提供了一种灵活的方式来处理不同类型的数据尤其是在需要节省空间或者需要通过同一个内存位置存储不同类型数据的场景中。 3联合体指针的注意事项 初始化在使用联合体指针之前应该确保指针已经被正确初始化指向一个有效的联合体实例。 内存释放如果使用new动态分配了联合体实例那么在不再需要时应该使用delete来释放内存避免内存泄漏。 成员访问在使用联合体指针访问成员时必须确保访问的是当前存储在联合体中的成员类型否则可能会导致未定义行为。 联合体指针提供了一种节省空间且灵活的方式来处理不同类型的数据。 3函数指针 函数指针是C语言中一个强大的特性它允许将函数的地址赋给一个变量使得可以通过这个变量来调用函数。这种机制提供了一种灵活的方式来处理函数使得函数可以像数据一样被传递和操作。 1.函数指针的定义 函数指针的声明需要指定函数的返回类型、指针类型即*以及函数的参数列表。例如如果有一个返回int类型、接受两个int参数的函数add那么对应的函数指针声明如下int (*funcPtr)(int, int); 这里funcPtr是一个指向函数的指针它可以存储add函数的地址。 2.函数指针的赋值 要将函数的地址赋给函数指针可以直接使用函数名。 这是因为在C语言中函数名本身就是一个指向函数的指针因此可以直接赋值给函数指针。 3.函数指针的使用 使用函数指针调用函数时需要使用括号来包围函数指针和参数。 例如int result funcPtr(5, 3); // 调用add函数 4.函数指针作为参数 函数指针常用作其他函数的参数这使得函数可以接收另一个函数作为输入从而提供高度的灵活性。例如可以定义一个接受函数指针作为参数的函数 void applyFunction(int x, int y, int (*func)(int, int)) {int result func(x, y);// 处理结果 }在这个例子中applyFunction接受两个int参数和一个函数指针参数然后调用这个函数指针指向的函数。 5.函数指针作为返回值 函数指针也可以作为函数的返回值这允许函数返回一个函数。这种技术可以用来实现回调函数和策略模式。 小编已经在之前的函数篇提及。 6.函数指针的注意事项 类型匹配函数指针必须指向与声明匹配的函数类型否则会导致编译错误或运行时错误。 空函数指针函数指针可以被初始化为NULL表示它不指向任何函数。 内存管理如果函数指针用于动态分配的函数对象需要确保正确管理内存避免内存泄漏。 在C语言中空指针Null Pointer是一个特殊的指针值它不指向任何有效的对象或函数。空指针的主要作用是表示“没有指向任何东西”或“没有有效的地址”。在C语言中空指针常被用来表示一个指针变量尚未被分配具体的内存地址或者用来表示某个指针变量不再指向任何对象。 4空指针NULL 定义:在C语言中空指针被定义为NULL它是一个宏在标准库stddef.h中定义。NULL的具体值是0这意味着在大多数平台上空指针和数值0是等价的。然而NULL的使用更加明确因为它专门用来表示空指针而0可能在其他上下文中有其他含义。 1空指针的使用 空指针通常用于以下几种情况 初始化指针在声明指针变量时如果没有立即分配内存可以将指针初始化为NULL以表明该指针当前不指向任何对象。 函数返回值当一个函数需要返回一个指针但没有有效的对象可以返回时可以返回NULL。 检查指针有效性在使用指针之前检查它是否为NULL是一个好习惯这可以防止解引用空指针导致的程序崩溃。 2空指针与空字符 需要注意的是空指针NULL和空字符\0是两个完全不同的概念。空指针是一个指针值表示没有指向任何对象而空字符是一个字符值通常用来表示字符串的结束。 3空指针的注意事项 空指针赋值不要将NULL赋值给非指针类型的变量这会导致编译错误。 平台依赖性虽然在大多数平台上NULL被定义为0但在某些系统上NULL可能有不同的定义。因此最好始终使用NULL而不是直接使用0。 空指针与空数组不要将空指针与空数组混淆。空数组是指一个长度为零的数组而空指针是一个不指向任何对象的指针。 结论 空指针可以帮助程序员处理指针变量的未初始化状态和错误情况。 5二级指针 在C语言中二级指针Double Pointer是指指向指针的指针。它是一个指针变量存储的值是另一个指针变量的地址。二级指针在处理动态内存分配、多维数组、函数参数传递等方面非常有用。理解二级指针对于深入掌握C语言的指针操作至关重要。 1二级指针的定义 二级指针的声明涉及到两个星号。例如int **ptr;声明了一个指向int类型指针的指针。这里ptr是一个二级指针它可以存储一个int*类型的地址。 2二级指针的内存分配 二级指针常用于动态分配多维数组。例如创建一个二维数组可以通过分配一个指针数组一级指针然后为每个指针分配一个一维数组二级指针。 3二级指针的使用 使用二级指针时可以通过连续的解引用来访问最终指向的数据。例如*arr会得到一个int*类型的指针而**arr会得到一个int类型的值。 4二级指针作为函数参数 二级指针也常用于函数参数特别是需要修改指针指向的值或者需要传递多维数组时。 5二级指针的注意事项 初始化在使用二级指针之前应该确保它们已经被正确初始化指向有效的内存地址。 内存释放如果使用malloc或calloc分配了内存应该在不再需要时使用free来释放内存避免内存泄漏。 解引用在使用二级指针时必须确保已经正确解引用否则可能会导致访问无效内存引起程序崩溃。 在C语言中常量指针和指向常量的指针是两个不同的概念它们在声明和使用上有所区别但都与指针和常量的关系有关。 6常量指针与指向常量的指针const 的用法 1.指向常量的指针Pointer to a Constant 指向常量的指针是指指针本身可以被修改但其指向的数据常量不能被修改。这种指针的声明方式是在指针的声明中将const关键字放在指针的后面紧挨着指针的类型前面。例如const int *ptr; 这里ptr是一个指向int类型的常量的指针。这意味着你可以通过ptr来改变它所指向的地址但是不能通过ptr来改变所指向地址处的值。 2.常量指针Constant Pointer 常量指针是指指针本身的值不能被修改即一旦指针被初始化后就不能指向另一个地址。这种指针的声明方式是将const关键字放在指针的声明中紧挨着指针变量的前面。例如int value 10; int *const ptr value; 这里ptr是一个常量指针它被初始化为指向value的地址之后你不能再让ptr指向另一个地址但可以通过ptr来修改value的值。 3.常量指针指向常量Constant Pointer to a Constant 这种指针既不能改变指向的地址也不能通过这个指针来改变指向地址处的值。声明时const关键字同时放在指针类型和指针变量之间以及指针类型和指针指向的类型之间。例如const int *const ptr value; 在这个例子中ptr是一个常量指针指向一个int类型的常量。这意味着ptr的值即它所指向的地址不能被改变同时ptr所指向的数据也不能被修改。 4.使用场景和注意事项 指向常量的指针当你需要一个指针来读取但不能修改某些数据时使用例如函数参数中传递的只读数据。 常量指针当你需要一个指针的地址固定不变时使用例如指向全局变量或静态变量的指针。 常量指针指向常量当你需要一个既不能改变指向地址也不能通过指针改变数据的指针时使用例如防止函数内部修改传入的参数。 常量指针与指向常量的指针提供了不同的保护级别帮助程序员控制数据的访问和修改。 题集 1指针笔试题1 判断代码运行结果 #includestdio.h #includestring.h int main() {char arr[] abcd;//char arr[] {a, b, c, d, \0}printf(%d\n, sizeof(arr)); printf(%d\n, sizeof(arr 0 )); printf(%d\n, sizeof (*arr)); printf(%d\n, sizeof(arr[1])); printf(%d\n, sizeof(arr)); printf(%d\n, sizeof(arr 1)); printf(%d\n, sizeof(arr[0] 1)); printf(%d\n, strlen(arr)); printf(%d\n, strlen(arr 0)); printf(%d, strlen (*arr)); printf(%d, strlen(arr[1])); printf(%d\n, strlen (arr)); printf(%d\n, strlen (arr 1)); printf(%d\n, strlen (arr[0] 1)); return 0; } 建议思考写下自己的答案再看后文进行核对与理解 答案解析5sizeof()内仅有arr数组名 arr代表整个数组所以sizeof计算的是整个数组的大小——5单位字节4/8除了仅有arr或arr 中arr代表的是整个数组其他arr代表的都是数组首元素的地址地址的大小就是4/8至于4/8取决于32位机器或64位机器1*arr就是数组首元素aint)大小为11arr[1] *(arr 1),就是数组的第二个元素大小为14/8arr中的arr代表的是整个数组所以arr代表的是整个数组的地址大小就是4/84/8arr 1中的arr代表的是整个数组所以arr 1代表的是整个数组后的和数组一样大小的连续元素的地址大小就是4/84/8第二个元素的地址4strlen(arr)中arr代表的是数组首元素的地址所以strlen()从数组首元素开始数到至’\0’结果就为44strlen(arr0)中arr代表的是数组首元素的地址所以strlen()从数组首元素开始数至’\0’结果就为4非法访问*arr表示数组首元素而strlen()要的是地址所以非法访问非法访问同上4arr取出了整个数组的地址就数整个数组结果就为4随机arr 1 就跳过了整个数组不知道什么时候出现’\0’也不知道任何元素的信息所以打印的是个随机数3arr[0] 1 就跳过了首元素结果就为3 考察一维数组的数组名——特殊与一般 涉及一维数组strlensizeof。 2指针笔试题2 判断代码运行结果 #includestdio.h #includestring.h int main() {char* p abcd;//这个代码的意思把首元素的地址a的地址放到指针变量p中//p就相当于一般的arr除了两种特殊情况除外首元素的地址printf(%d\n, sizeof(p)); //地址的大小就是4/8字节至于4/8取决于32位机器或64位机器printf(%d\n, sizeof(p 0 )); //同上printf(%d\n, sizeof (*p)); //*p就是数组首元素achar大小为1字节printf(%d\n, sizeof(p[1])); //p[1] *(p 1),就是数组的第二个元素大小为1字节printf(%d\n, sizeof(p)); //p中的p代表的是数组首元素的地址所以p代表的是存储指针变量p的地址大小就是4/8printf(%d\n, sizeof(p 1)); //p 1中的p代表的是数组首元素所以p 1代表的是存储指针变量p的地址处后一位的地址大小就是4/8printf(%d\n, sizeof(p[0] 1)); //b的地址大小就是4/8printf(%d\n, strlen(p)); //strlen(p)中p代表的是数组首元素的地址所以strlen函数从数组首元素开始数至\0结果就为4printf(%d\n, strlen(p 0)); //strlen(p 0)中p代表的是数组首元素的地址所以strlen函数从数组首元素开始数至\0结果就为4//printf(%d, strlen (*p)); //*p表示数组首元素而strlen函数要的是地址所以非法访问//printf(%d, strlen(p[1])); //同上printf(%d\n, strlen (p)); //p取出了数组首元素的地址的地址不知道什么时候出现\0也不知道任何元素的信息所以打印的是个随机数printf(%d\n, strlen (p 1)); //p 1 就跳过了整个数组不知道什么时候出现\0也不知道任何元素的信息所以打印的是个随机数printf(%d\n, strlen (p[0] 1)); //p[0] 1 就跳过了首元素结果就为3return 0; }考察字符指针——把首元素的地址a的地址放到指针变量p中 涉及字符指针strlen。 3指针笔试题3 判断代码运行结果 #includestdio.h struct test {int Num;char* pcname;short sDate;char cha[2];short sBa[4]; }* p; //假设 * p 0x00000000; //已知结构体变量test的大小为20字节 int main() {printf(%p\n, p 1);//指针加1跳过整个指针权限的内容步长解引用权限所以这里跳过了整个结构体变量也就是20个字节,结果用十六进制表示就是00000014printf(%u\n, (unsigned long)p 1);//先把结构体指针变量p强转成无符号长整型变量再加1就是让一个整型变量加1结果就是加1用十进制表示就是1printf(%p\n, (unsigned int*)p 1);//先把结构体指针变量p强转成整型指针变量再加1就是让一个整型指针变量加1指针加1跳过整个权限的内容所以这里跳过了整个整型变量也就是4个字节,结果用十六进制表示就是00000004 }考察指针加1的意义是跳过一个步长的地址 涉及结构体指针基本指针。 4指针笔试题4 判断代码运行结果 //x86,小端 #includestdio.hint main() {int a[4] { 1, 2, 3, 4 };int* p (int*)(a 1);int* p1 (int*)((int)(a 1) 1); //如果我们定义一个int* pa a; 则a 1就等价于*(pa 1)printf(%x\n, p[-1]); //1.p[-1] *(p - 1),因为p的类型为int*所以p-1就是向前挪动一个整型4个字节的长度指向了第4个元素的第一个字节的最左端//2.再进行解引用根据p的访问权限可知从当前位置向后访问一个整型4个字节就得到了数组的第4个元素——4//3.又因为%x是用来打印十六位进制数且会去掉前面的0所以打印就是4printf(%x\n, * p1); //1.a 1 //低地址 高地址//低地址 高地址 //01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 //01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00//地址设为00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f //00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f //指针位置pa -- pa //2.(int)(a 1) 把 地址04 强转成一个大小等于 04 的整型数据//3.(int)(a 1) 1一个整型数据加1就是数值加1此时((int)(a 1) 1)就得到了一个数值大小为 05 的整型数据//4.((int*)((int)(a 1) 1))把数值大小为 05 的整型数据强转为 地址05//5.int* p1 (int*)((int)(a 1) 1)把上面得到的 05的地址 赋给 类型为int*的 整形指针变量p1//6.printf(%x\n, * p1)再进行解引用根据p的访问权限可知从当前位置向后访问一个整型4个字节就得到了00 00 00 03小端存储转换为03 00 00 00原值小端存储是以字节为单位的//7.又因为%x是用来打印十六位进制数且会去掉前面的0所以打印就是3000000return 0; }考察并涉及小端存储%x的作用指针运算。 5指针笔试题5 判断代码运行结果 #includestdio.h int main() {int arr[] { 1, 2, 3, 4 };int* p (int*)(arr 1);printf(%d\n, *(p - 1));//没什么好讲的printf(%d\n, *(arr 1));//同上return 0; }考察并涉及一维数组数组名。 6指针笔试题6 判断代码运行结果 #includestdio.h int main() {int arr[2][3] { (1, 2), (3, 4), (5, 6)};//逗号表达式的值就是,右边的表达式的结果但要注意,左边的表达式也会执行且是先执行的//所以该二维数组的元素为//2 4//6 0//0 0int* p;p arr[0];printf(%d\n, p[1]);//两种理解p[1]的方法//1.用数组的格式理解p arr[0],则p[1] arr[0][1] 4;//2.用数组的本质理解arr[0]作为二维数组的第一行的数组元素的数组名代表的是数组第一行的首元素的地址即——arr[0][0],//p[1] *(p 1) *(arr[0][0] 1) 4return 0; }考查并涉及指针与二维数组的关系和逗号表达式的作用。 7指针笔试题7 判断代码运行结果 #includestdio.h int main() {int arr[5][5];//数组元素|0 0 0 0 0 | 0 0 0 0 0 | 0 0 0 0 0 | 0 0 0 0 0 | 0 0 0 0 0 | // arr[0] arr[1] arr[2] arr[3] arr[4]//地址设为|0 1 2 3 4 | 5 6 7 8 9 | a b c d e | f 0 1 2 3 | 4 5 6 7 8 |int(*p)[4] (int(*)[4])arr;//arr作为二维数组的数组名类型为int(*)[5],与数组指针变量p类型为int(*)[4]类型基本一致所以强转之后可以和数组名一样理解printf(%p,%d\n, p[4][2] - arr[4][2], p[4][2] - arr[4][2]);//以p为二维数组的数组名的二维数组// 元素| 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 // p[0] p[1] p[2] p[3] p[4] p[5] p[6]//地址设为| 0 1 2 3 | 4 5 6 7 | 8 9 a b | c d e f | 0 1 2 3 | 4 5 6 7 | 8//所以 p[4][2] - arr[4][2] 12 - 16 -4,再根据占位符的功能打印的结果为FFFFFFFC十六进制-4十进制return 0; }考察%p打印的是无符号十六进制的地址值 涉及二维数组占位符%p,数组指针。 8指针笔试题8 判断代码运行结果 #includestdio.h int main() {char* arr[3] { hello, world, bite };//arr[0] h , arr[1] w, arr[2] b//即数组元素h| w | b//元素名 arr[0]|arr[1]|arr[2]char** pa arr;pa;printf(%s\n, *pa);return 0; }考查字符指针在接收字符串时接受的是字符串的首元素的地址 涉及指针数组占位符%s。 9指针笔试题9 判断代码运行结果 #includestdio.h int main(){char* c[4] { hello, world, bite, pengge };//一级字符指针数组c// 数组元素值| h| w| b| p|// 元素类型|char*|char*|char*|char*|// 元素意义|指向hello的指针一开始指向h|指向world的指针一开始指向w|指向bite的指针一开始指向b|指向pengge的指针一开始指向p// 元素名| c[0]| c[1]| c[2]| c[3]|// 地址设为 0 1 2 3char** cp[4] {c 3, c 2, c 1, c};//二级字符指针数组cp// 数组元素| 3 | 2 | 1 | 0 |// 元素名|cp[0]|cp[1]|cp[2]|cp[3]|// 地址设为 a b c dchar*** cpp cp;// *cpp cp[0] aprintf(%s\n, **cpp);//都只能先从cpp开始分析//1.cppcpp先自增1——*cpp a 1 b;//2.**(cpp)两次解引用——(1)*(cpp) b -- (2)**(cpp) 2;//3.%s的作用从所给地址开始一直打印字符至\0处所以打印的结果为biteprintf(%s\n, *-- *cpp 3);//1.cppcpp再自增1——*cpp b 1 c;//2.*cpp解引用——*cpp c;//3.-- *cppc自减1——*c 1 - 1 0;//4.*-- *cpp解引用——*c 0;//5.*-- *cpp 3一级字符指针 3——*0 h 3 l临时不是真的加;//6.打印结果为loprintf(%s\n, *cpp[-2] 3);//1.cpp[-2]cpp指向的值先减2再解引用——(1)cpp - 2——*cpp c - 2 a临时不是真的加;(2)*(cpp - 2)——*(cpp - 2) a;//2.*cpp[-2]再解引用——**(cpp - 2) *a 3;//3.*cpp[-2] 3一级字符指针 3——*3 p 3 g临时不是真的加;//4.打印结果为ggeprintf(%s\n, cpp[-1][-1] 1);//1.cpp[-1]cpp指向的值先减1再解引用——(1)cpp - 1——*cpp c - 1 b临时不是真的加;(2)*(cpp - 2)——*(cpp - 2) b;//2.cpp[-1][-1]b指向的值先减1再解引用——(1)b - 1——*b 2 - 1 1临时不是真的加;(2)*1——*1 w;//3.cpp[-1][-1] 1一级字符指针 1——*1 w 1 o临时不是真的加;//4.打印为orldreturn 0; }考察操作符的优先级只在操作数的相邻位置才考虑 和-- 会真实改变变量存的数据 涉及二级指针操作符和–解引用。 快乐的时光总是短暂咱们下篇博文再见啦不要忘了给小编点点赞和收藏支持一下在此非常感谢
http://www.dnsts.com.cn/news/145235.html

相关文章:

  • 工业智能科技网站设计seo是什么技术
  • 检测网站安全怎么开公司
  • 建设网站的工作总结网页制作app
  • 简洁大气的企业网站电子商务网站开发与设计
  • 科技部网站改版方案wordpress frame
  • 网站建设ppt方案结语wordpress主题the 7特点
  • 株洲网站建设优化企业保山网站建设多少钱
  • 动易网站 首页模板修改网站建设 洪塔
  • 网站维护需要多久时间网站好坏标准
  • 做的网站百度排名没有图片显示求个网站知乎
  • 做外贸生意在哪个网站手机微信小程序免费制作平台
  • 看案例网站东莞网站建设方案报价
  • 中国域名网站餐饮logo设计
  • 淄博网站建设至信网络台州城乡建设局网站
  • 淘宝网站的建设目的是什么装修价格
  • 住房和城乡建设部网站干部学院电商运营的概念
  • 网站根目录表示免费的网站app软件
  • 网站建设制作官网页面设计比较好的公司
  • 做试管婴儿的网站vs2013做网站保存的格式
  • 外贸网站模板建设关于宠物的网页设计
  • 清河做网站哪儿好苏州博客关键词优化
  • 公司网站可以自己建立吗奉贤品牌网站建设
  • 国外 平面设计 网站网站建设分为哪几种
  • 勐海县住房和城乡建设局网站wordpress 金融 模板
  • 网站根目录文件夹上海做推
  • 阿里巴巴网站建设规划0元可以注册公司吗
  • 深圳企业网站建设费用申请公司费用
  • 广州番禺区人才网建站到网站收录到优化
  • 天津企业网站建设方案北京建站方案
  • 做网站页面大小多大佛山专业做网站公司