欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > C++复习day01

C++复习day01

2024/10/30 10:43:23 来源:https://blog.csdn.net/2301_79420799/article/details/141828296  浏览:    关键词:C++复习day01

这篇博客主要复习C语言的数组和指针

1.指针数组和数组指针

问:指针数组和数组指针,哪一个是指针,哪一个是数组?
我们来类比一下,整型数组是存放整型的数组,那么指针数组就是一个存放指针的数组,自然而然,数组指针就是一个指向数组的指针

#include <iostream>int main()
{int a = 1, b = 2, c = 3;int* p1 = &a, * p2 = &b, * p3 = &c;int* arr[] = { p1,p2,p3 }; //指针数组int** ptr = arr; //数组指针return 0;
}
2.函数指针

这个有点特殊,所以单独拿出来做一下介绍
首先,函数指针变量应该是⽤来存放函数地址的,未来通过地址能够调⽤函数的。这个函数一定是有地址的

#include <iostream>
void solve()
{std::cout << "今天是复习C++的第一天" << std::endl;
}
int main()
{std::cout << solve << std::endl; //00C3137Astd::cout << &solve << std::endl; //00C3137Areturn 0;
}

可以发现,对函数名取地址和原来的函数名效果相同——也就是说函数名就是地址,同样取函数的地址也可以使用“&函数名”的方法,二者是等效的
提出问题:那么什么叫做函数指针?
回答:顾名思义,就是一个指向函数的指针,请看“VCR”

int (*pf) (int x, int y)| | ------------| | || | pf指向函数的参数类型和个数的交代| 函数指针变量名pf指向函数的返回类型
int (*) (int x, int y) //pf函数指针变量的类型

下面来举一个例子

#include <iostream>int add(int x, int y)
{return x + y;
}
int main()
{//以add()函数为例int (*p)(int, int) = add;std::cout << p(1, 2) << std::endl; //3std::cout << (*p)(1, 2) << std::endl; //3return 0;
}

下面来看,两个比较难的例子,尽量去分析一下

(*(void (*)())0)();void (*signal(int , void(*)(int)))(int);
来分析一下,首先是第一个式子
(void (*)())很明显是一个函数指针类型,意思就是把**int**类型的0强制转化为一个函数指针类型,然后对它解引用,并且调用它第二个例子
signal的第一个参数的int类型,第二个参数是”void(*)int的函数指针类型“,signnal的返回值也是“void(*)int的函数指针类型”,如果typedef void(*func)(int),之后就相当于func signal(int,func)
3.const和指针

const和*的位置不同,会有不一样的效果,他们被称作是指针常量,常量指针

#include <iostream>int main()
{int a = 1, b = 2;const int* p1 = &a;int const* p2 = &a;int* const p3 = &a;p1 = &b;p2 = &b;//p3 = &b; 这个会报错,因为p3是指针常量,指针的指向不能修改,但是指针指向的值可以修改//*p1 = 100;//*p2 = 100; 这两个会报错,因为p1,p2都是常量指针,指针的指向可以改变,但是指针指向的值不能改变*p3 = 100;return 0;
}
4.sizeof,数组,指针

数组名的意义

  1. sizeof(数组名),这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩。
  2. &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址。
  3. 除此之外所有的数组名都表⽰⾸元素的地址。
#include <iostream>int main()
{int arr[] = { 1,2,3,4,5 };int* ptr = arr;std::cout << "sizeof(arr) = " << sizeof(arr) << std::endl;std::cout << "sizeof(ptr) = " << sizeof(ptr) << std::endl;return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com