首页 > 其他分享 >指针(3)的期末复习

指针(3)的期末复习

时间:2024-09-07 22:22:58浏览次数:17  
标签:复习 int 地址 期末 数组 函数指针 bit 指针

1. 字符指针变量

在指针的类型中我们知道有⼀种指针类型为字符指针char*

代码 const char* pstr = "hello bit."; 特别容易让同学以为是把字符串 到字符指针 pstr ⾥了,但是本质是把字符串 hello bit 放 hello bit. ⾸字符的地址放到了pstr中。 

 #include <stdio.h>
 int main()
 {
 char str1[] = "hello bit.";
 char str2[] = "hello bit.";
 const char *str3 = "hello bit.";
 const char *str4 = "hello bit.";
 if(str1 ==str2)
   printf("str1 and str2 are same\n");
 else
   printf("str1 and str2 are not same\n");
 if(str3 ==str4)
    printf("str3 and str4 are same\n");
 else
    printf("str3 and str4 are not same\n");
 return 0;
 }

 运行结果

这⾥str3和str4指向的是⼀个同⼀个常量字符串。C/C++会把常量字符串存储到单独的⼀个内存区域, 当⼏个指针指向同⼀个字符串的时候,他们实际会指向同⼀块内存。但是⽤相同的常量字符串去初始 化不同的数组的时候就会开辟出不同的内存块。所以str1和str2不同,str3和str4相同。 

2. 数组指针变量与 ⼆维数组传参的本质

数组指针变量  int (*p)[10];

解释:p先和*结合,说明p是⼀个指针变量,然后指针指向的是⼀个⼤⼩为10个整型的数组。所以p是 ⼀个指针,指向⼀个数组,叫数组指针。 

数组指针变量是⽤来存放数组地址的

⼆维数组传参,形参的部分可以写成数组,也可以写成指针形式。 

 #include <stdio.h>
 void test(int (*p)[5], int r, int c)
 {
   int i = 0;
 int j = 0;
 for(i=0; i<r; i++)
 {
 for(j=0; j<c; 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}};
 test(arr, 3, 5);
 return 0;
 }

 ⼆维数组的数组名表⽰的就是第⼀⾏的地址,是⼀ 维数组的地址。根据上⾯的例⼦,第⼀⾏的⼀维数组的类型就是 型就是数组指针类型 int [5] ,所以第⼀⾏的地址的类 int(*)[5] 。那就意味着⼆维数组传参本质上也是传递了地址,传递的是第⼀ ⾏这个⼀维数组的地址,那么形参也是可以写成指针形式的  

3. 函数指针变量

函数指针变量应该是⽤来存放函数地址的,未来通过地址能够调⽤函数的。

 函数名就是函数的地址,当然也可以通过 式获得函数的地址。 & 函数名 的⽅ 如果我们要将函数的地址存放起来,就得创建函数指针变量咯,函数指针变量的写法其实和数组指针 ⾮常类似。

 

 #include <stdio.h>
 int Add(int x, int y)
 {
  return x+y;
 }
 int main()
 {
  int(*pf3)(int, int) = Add;
 }
  printf("%d\n", (*pf3)(2, 3));
   printf("%d\n", pf3(3, 5));
 return 0;

 两个值是一模一样的

typedef 是⽤来类型重命名的,可以将复杂的类型,简单化。 

 typedef unsigned int uint这个代码就是将unsignedint重命名为uint

但是对于数组指针和函数指针稍微有点区别: 

typedef int(*parr_t)[5]; // 新的类型名必须在 * 的右边 

4. 函数指针数组

 那要把函数的地址存到⼀个数组中,那这个数组就叫函数指针数组

int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; 

5. 转移表

函数指针数组的⽤途:转移表 

按照4中例子取函数 

(*p[input])(x, y); 

标签:复习,int,地址,期末,数组,函数指针,bit,指针
From: https://blog.csdn.net/2402_86688931/article/details/142005141

相关文章

  • C++复习day06
    一、内存管理1.课件上关于内存分配的题目intglobalVar=1;staticintstaticGlobalVar=1;voidTest(){staticintstaticVar=1;intlocalVar=1;intnum1[10]={1,2,3,4};charchar2[]="abcd";constchar*pChar3="abcd";int*ptr1=(in......
  • 重生之霸道C语言爱上我之走入指针(3)
    根据前两篇与指针的初步接触后,我们已经了解到了指针里面最基本的知识,而接下来的文章,将会更注重于指针的深入理解和运用。1.数组名的理解1.1arr,即一个数组的数组名的理解在上一篇文章1.1里面的代码中,我们在用指针访问数组内容的时候,有这样的代码:intarr[10]={1,2,3,4,5,6......
  • E31.【C语言】练习:指针运算习题集(上)
    Exercise1求下列代码的运行结果#include<stdio.h>intmain(){ inta[5]={1,2,3,4,5}; int*ptr=(int*)(&a+1); printf("%d",*(ptr-1)); return0;}答案速查:分析:Exercise2 求下列代码的运行结果//在x86环境下//假设结构体的大小是20个字节......
  • 475. 简单的学校网页 大学生期末大作业 Web前端网页制作 html+css
    目录一、网页概述二、网页文件 三、网页效果四、代码展示1.html2.CSS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强六、更多推荐欢迎光临仙女的网页世界!这里有各行各业的Web前端网页制作的案例,样式齐全新颖,并持续更新!感谢CSDN,提供了这么好......
  • 指针之旅(3)—— 指针 与 数组
    目录1.数组名的两种意义2. 指针访问数组(指针也能下标引用)3.一维数组传参的本质和sizeof在函数中失效的原因4.指针数组4.1指针数组的概念4.2一级指针数组4.3 一级指针数组模拟实现二维数组5.数组、指针 与字符串6.数组指针(变量)6.1数组指针的概念6.2......
  • C++编程开发和指针的关系
      指针C/C++windows编程平台的使用使用很多。C++程序设计语言和Java程序设计语言是一样的标准开发语言。程序设计语言的开发类库发布之后会绑定相应的平台。现C++程序设计语言的标准发布之后,使用比较多的图形接口类库是QT。 Java的编程系列是站Java企业级别开发的基础......
  • Java工程师多年之后看指针
      指针是基本数据类型,占用4个字节。Int类型的数据计算机处理语言中是处中间层。使用图形化方式可以这样更形象直观。   计算机对二进制处理数据的方式比较敏感。现人们的大脑计数方式是通过十进制的方式计算日常和工作中需要的业务。操作符的限制,才增加了十六进制......
  • C++学习笔记----6、内存管理(二)---- 数组指针的双向性
            你可能已经看到指针与数组之间的一些重叠。自由内存空间分配的数组由其第一个元素的指针进行访问。栈上的数组通过使用数组语法([])或者正常变量声明来访问。你还会看到的是,其重叠不仅如此,指针与数组有更复杂的关系。1、数组退化至指针        自由内......
  • 【时时三省】(C语言基础)指针进阶 例题
    山不在高,有仙则名。水不在深,有龙则灵。            ----CSDN时时三省字符数组例题: arr后面放了六个字符所以这个数组的元素个数就是6第一个arr因为他计算的是一整个数组的大小就是打印6第二个arr+0arr没有单独放在它的内部所以它计算的就......
  • 【时时三省】(C语言基础)指针进阶6
    山不在高,有仙则名。水不在深,有龙则灵。             ----CSDN时时三省例题1: sizeof(数组名)-数组名表示整个数组的-计算的是整个数组的大小&数组名-数组名表示整个数组,取出的是整个数组的地址除此之外,所有的数组名都是数组首元素的地址第一个a......