非常感谢,只是关于b还是有一点问题:
int (*b)[4]=new int[4];
这条语句为什么编译不通过?
要强制类型转换的 new返回了void*类型。要用int (*b)[4] = (int (*)[4])new int[4]。
c\/c++中的指针的应用及注意问题
int *b,b表示的是指针变量(注意,是b表示指针变量而不是*b),*表示要说明的是指针变量。大家注意int *b[2]和int(*b)[2]是不同的,int *b表示一个指针数组,而int (*b)[2]表示含有两个元素的int指针,这里要注意运算优先级问题,有助于理解指针问题。在这里大概介绍基本概念就够了,...
关于c++指针的问题请高手赐教
1、表达式中的数组名(与声明不同)被编译器当作一个指向该数组第一个元素的指针 因此如a[i]这样的访问都被编译器改写或解释为*(a+i)的形式,同样取下标操作符的操作数是可交换的,所以a[3]可以写成3[a],不过通常你不会这样做。2、下标总是与指针的偏移量相同,下标*sizeof(元素类型)就是偏...
C++指针问题?这里选项b为什么是错的?是不是题目有误?
题目正确(附实例程序验证),D选项正确的话,那么B选项明显是错误的。注意B选项得到的是 : 元素b[3][0]的值加3。详细说明:int b[4][4],数组有4行4列,注意数组下标从0开始到3。(b+3)表示第四行的起始地址,那么这个地址+3,(*(b+3)+3)就是第四行第四列数据的地址。这就是正确...
有关C++指针和数组的一个小问题
数组是一种类型,独立的类型,不是什么指针或者地址。所谓数组名能作为数组首地址,是因为c++进行了隐式的类型转换。就好像 char c = 'a';int i = c;一样,其实是int i = static_cast<int>(c);,只不过char类型被隐式转换成int不需要写出来。所以数组作为地址时c++其实做的是int *p=static_...
c++ 数组用指针方式传递给函数以后如何获得数组的长度?
将数组作为一个参数传出去,那么他就会“退化”成一个指针类型,进而失去“数组的属性”。(这里的数组不是new出来的)这里的“属性”指的是数组可以使用sizeof(Array)\/sizeof(Array[0])的方法获得其长度的方法的属性。要在一个函数中得到一个数组的长度,你应该这个数组作为一个引用传出去,那样,就能...
有关c++中数组与指针的关系
1,数组是一块内存连续的数据。2,指针是一个指向内存空间的变量。对于数组来说,数组的首地址,也可以用指针来表示操作,如:int a[10];int *p,n;p = a;对第一个元素取值,可以用几种方法:n =a[0];n = *p;n = p[0];n = *(p+0) ;3,不同的地方是数组是由编译器分配的空间,...
C++ 数组与指针
由于b是指针,无论是否指向a,指向什么,sizeof(b)等于sizeof(int),32位平台上等于4。以上讨论的问题引发的关于数组名称的问题:数组名本身是个地址常量,但是某些特殊情况下它的语义可以发生改变。例如sizeof(a),这时a表示整个数组对象(这里指语法对象,不是指类的实例)而不是这个常量本身。基于...
C++指针、数组、引用、变量作函数参数的问题
如有函数声明:void swap(int a,int b); \/\/功能是交换a,b值,但事实上对调用函数没有影响,因为swap函数的局部变量a,b在该函数执行完释放掉了,其值也就丢失了。2. 指针、数组作为参数,这是地址传递,指针和数组可以看成是指向一个或一片连续空间的指针(区别是:一个为变量地址,一个常量...
请教C++二维数组和指针的简单问题。
第二题 主要是明白*s[2]这个是什么。其实有两个操作符,一个是解引用操作符*;另外一个是下标操作符[]。查一下优先级吧。应该先是下标操作所以*s[2]变成了*(s[2])。那么s[2]是什么呢?其实由定义char s[4][6]可以明白。s中存放的是指向字符串的指针。s[2]是一个指针,指向一个字符串...
c++指针与数组首地址的问题!
在具体一点: 假设数组的首地址是INDEX1(那么INDEX1就是a[0]的地址了~), 那么这个值存在a中, 而a放在地址为INDEX2的内存位置, 其值为INDEX1 p=a 结果为 p=INDEX1, 这个是你想要的 p=&a 结果为 p=INDEX2, 这个不是你要的吧 p=&(a[0]) 结果为 p=INDEX1, 也行 个人理解, 如有...