小白关于c++指针的一些疑问

问题描述

小白关于c++指针的一些疑问

1.在一些定义中(比如int p=new int[5] ; int *p=arrayname)p知不知道自己的范围?
2.如果有范围的指针做右值,它会把自己的范围也赋给左值吗?
3.vectorvec;
vec.begin()是一个iterator,&vec[0]是一个vector
类型,但是他们的意义都是一样的,指向vec的第一个元素,他们可以判断是否相等吗?

解决方案

1)**不能,虽然实际上,p 在内存分配的时候,记录了分配的元素个数,和内存大小
但是,程序员不可以直接拿来用
因为每个编译器。内存分配的处理方式都不同。这个是不暴露给程序员用的,对程序员是透明的。
但是 delete 的时候,编译器生成的代码,知道分配多少内存,可以正确的析构每个分配的对象。**
2)不能,指针没有多余的地方,容纳分配的内存大小这个量,
而由于和第一条相同的原因,
程序员没法知道分配了多少对象。
3)不能这么直接,iterator 的实现方式,由编译器决定,而&vec[0]仅仅是个指针,
不能断定二者是类型相同的,不能断定一定可以比较。
但是,可以比较 &(*vec.begin()) 和 &vec[0] ;

解决方案二:

char指针的疑问
C++的疑问
C++疑问

解决方案三:

  1. 保证数组下标去溢出是程序员的责任。
  2. 不能,数组名退化为一个指针。
  3. 类型不同,不可直接比较。
时间: 2024-11-22 21:00:55

小白关于c++指针的一些疑问的相关文章

关于系统位数和地址总线位数以及int和指针大小的疑问

问题描述 关于系统位数和地址总线位数以及int和指针大小的疑问 问题1:32位,64位系统.地址总线各为多少? 问题2:指针的大小是等于机器字长还是等于地址总线的位数? 问题3:为什么linux上64位系统的getconf WORD_BIT值为32位?是表示机器字长是32位吗?还是说他的值就是int值的大小而不具有别的意义?如果是表示机器字长是32位的话,那么为什么指针的大小是8字节? 解决方案 问题1:32位,64位系统.地址总线各为多少? 地址总线属于硬件,具体来说和CPU有关,和操作系统无

time函数-c++小白关于time()的疑问

问题描述 c++小白关于time()的疑问 time函数返回的秒数是一个整型吧?程序运行几毫秒的时间,他的返回值会改变吗? 解决方案 他的返回值表示: 从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数. 而且他的返回值是个整数(占的64位二进制位) 运行几毫秒当然有可能会改变,可能就进入下一秒了 解决方案二: 可能,看精度的问题了

蚕豆网精品APP推荐第140期:慧眼识App

每日看酷闻,当日新鲜IT资讯全Hold住,移动互联耍酷玩Fashion尽在蚕豆!欢迎订阅 蚕豆网.[产品资讯] 索尼 SmartWatch升级后问题多多如果你手中有一台索尼SmartWatch,那么你最好不要去谷歌Play Store上为它进行最新的一次系统升级.一些SmartWatch用户表示,在最近的一次升级之后他们的手表经常重启.提醒功能失灵还经常掉线.虽然我们已经试图联系索尼询问事情的原委,但是目前还没得到回应.出现问题的软件版本为1.2.33,目前已经更新至了1.2.34,不过目前还不

小白关于c++string的疑问

问题描述 小白关于c++string的疑问 string str; string * p=str.begin(); 为什么不能把string的首地址给一个指向string的指针? 那么应该怎么写可以取到指向string首地址的string*类型的指针?? 解决方案 str.begin()得到的是指向字符串开头的Iterator 要得到地址的话,直接取地址不就好了? string str; string *p = &str; 解决方案二: C++的疑问C++疑问 解决方案三: str.begin(

关于利用fgets()改变文件指针位置再利用fprintf()更新文件数据的一些小疑问求教

问题描述 关于利用fgets()改变文件指针位置再利用fprintf()更新文件数据的一些小疑问求教 下面便是一个更新卡信息文件数据的函数updateCard int updateCard(const char* CardPath,const Card* pcard,int nIndex) {//更新卡信息文件中的数据,CardPath为文件路径,pcard为指向要更新的卡信息结点的指针,nIndex为卡信息在文件中的索引号(即在卡信息文件中的行数) FILE* fp = NULL; long

c语言-c小白求教指针问题(定义指针变量的位置)

问题描述 c小白求教指针问题(定义指针变量的位置) 请教问什么1和2都可以编译通过,但是写到3的位置报错呢 #include <stdio.h> int main(){ int a = 10; int b = 100; int c = 1; // 1.int *d = &c; int *point_1,*point_2; //2. int *d = &c; point_1 = &a; point_2 = &b; //3.int *d = &c; prin

arraylist-JAVA小白问题:测试Iterable接口的Iterator迭代器方法时遇到的疑问

问题描述 JAVA小白问题:测试Iterable接口的Iterator迭代器方法时遇到的疑问 创建个Arraylist集合,放几个数据,然后用迭代器循环遍历,同时想做个判断,如果等于指定的数值的数据出现了,就删除它,继续迭代别的元素,单独用remove删除方法没问题,但把它和next方法合起来用,就报错了,求解,谢谢! 解决方案 既然你自己也标注了正确的和错误的,我给你提一下,你这里有三个点: 分别是,it.hasnext(),第一个it.next(),第二个next. 先解释一下it.hasn

c++-C++小白关于C++ primer中指针交换的问题

问题描述 C++小白关于C++ primer中指针交换的问题 C++primer第五版的6.22题,要求是交换两个int指针.#includevoid exchange(int *&xint *&y);void exchange(int *&xint *&y){ int *z; z=x; x=y; y=z;}int main(){ using namespace std; int *p; int *t; int i=10; int j=20; *p=i; *t=j; exc

c语言-关于C语言指针一点疑问

问题描述 关于C语言指针一点疑问 int get_memory(char **p) { (*)p = "hello"; } int main(int argc, char argv[]) { char *str = NULL; get_memory(&str); printf("%sn", str); system("PAUSE"); return 0; } 为什么printf("%sn", str);里面str前面不