#include "iostream.h"
int *findmax(int *array,int size,int *index);
void main(void){
int a[]={33,91,54,67,82,37,85,63,19,68}, *maxaddr, idx ;
maxaddr=findmax(a,sizeof(a)/sizeof(*a),&idx);
cout<<idx<<endl;
cout<<maxaddr<<endl;
cout<<a[idx]<<endl;
}
int *findmax(int *array,int size,int *index) {
int max,i;
max=*(array+0); //array[0];
for (i=1;i<size;i++)
if (max<*(array+i)) {
max=*(array+i);
*index=i;
}
return(array+*index);
}
为什么当中出现了idx和index 这2个都是指同一个东西吗?还有为什么idx 使用了&idx但是index使用了*index?int *findmax(int *array,int size,int *index);已经声明了是指针变量在下面的定义函数不是应该用取地址符号&了吗也就是int *findmax(int *array,int size,int *index) 按我的想法要写成int *findmax(int &array,int size,int &index) 而且怎么size没有符号&或者*点缀呢。。请高手详细解答该程序的流程和细节。谢谢。。
1.例】 定义findmax()函数,其功能是寻找数组中的最大元素,将该元素的下标通过参数返回,并返回其地址值,编程实现findmax()函数。感谢楼下沙发高手替我解答了。。小弟不才还有些小疑问。程序执行结果为:
idx使用&运算符是对其做取地址运算然后传递给指针型参数index,可是idx在整个程序
过程中没有看到他表示什么东西。是不是传递之后index又反过来传递给idx了。也就是
使用指针可以双向传递?不是说实参形参只能单向传递的吗?
还有为什么不直接使用index也就是使用cout<<*index也是一样输出元素下标啊
2.例】 定义findmax()函数,其功能是寻找数组中的最大元素,将该元素的下标通过参数返回,并返回其地址值,编程实现findmax()函数。感谢楼下沙发高手替我解答了。。小弟不才还有些小疑问。程序执行结果为:1
0×0012FF5C
91
Press any key to continue
怎么对应不上cout<<idx<<endl;
cout<<maxaddr<<endl; 麻烦大家
cout<<a[idx]<<endl;
第一个是说输出地址,把第二个是输出元素下标,第三个是输出最大值。在函数声明时候出现的idx好像没有说是指谁的地址诶好奇怪怎么就可以输出。
关于c++指针的问题请高手赐教
因此如a[i]这样的访问都被编译器改写或解释为*(a+i)的形式,同样取下标操作符的操作数是可交换的,所以a[3]可以写成3[a],不过通常你不会这样做。2、下标总是与指针的偏移量相同,下标*sizeof(元素类型)就是偏移数组起始地址的实际字节数。3、“作为函数参数的数组名”等同于指针,任何传递给函...
c++虚函数问题,大神请进
1,对函数指针来说,指针值是函数地址,取*还是函数地址,所以相等看起来是没啥问题的。2,不能这么调用,成员函数是隐含带有this参数的,和普通函数不一样。对象内存的第一个指针是vtable(如果有),vtable是一个void **类型的指针,每一项都是一个函数指针,所以你的代码也是没法正确运行的。以下是...
C++程序设计 整除问题,高手进
1、void count(int*a,int *n)定义一个无返回值的函数count,它有两个形式参数,第一个是指针a,指向int型数据,第二个是指针n,指向int型数据。2,3、参看注释 void countValue(int *a,int *n){ int i;n=0; \/\/n指向的内容赋值为0 for(i=1;i<=1000;i++){ if((i%7==0&&i%...
c\/c++中的指针的应用及注意问题
一、我们先来回忆一下指针的概念吧,方便下面的介绍指针是存放地址值的变量或者常量。例如:int a=1;a就表示指针常量(“”表示取地址运算符,也即引用)。int *b,b表示的是指针变量(注意,是b表示指针变量而不是*b),*表示要说明的是指针变量。大家注意int *b[2]和int(*b)[2]是不同的...
C++有关函数中void指针的问题
首先你这个函数就错了。你是不能直接对void指针进行操作的。如果你知道传进来的是何种数据,你在进行操作之前,得先进行转换,比如说:int *a = (int*)n \/\/n是形参 a=1;void r(void *n){ int *a=(int*)n;a = 0;a = *a - 1;cout << *a << endl;} int main(void){ unsi...
C++指针问题...为什么调用函数中要用void?
void*说明返回的是通用指针,不是说没有返回值。需要用强制转换成具体的类型。比如函数malloc返回的就是void*,需要根据不同的指针类型转换。如 int *a;a = (int*)malloc(sizeof(int));如果是你说的是以函数指针当做参数的,void*说明这个参数可以接受不同类型的函数。
VC++中的指针问题
1.指针的类型由他定义时指向的数据类型决定,即 int * pInt 可简称 int指针, void *(*fun)(int ,int) 即一个特定函数的指针,只能指向 接受(int,int)参数,返回void *类型的指针,所以它的类型较多,hoho。这也是为什么会出现多级指针,如 int **p的原因。这也是用好指针的关键,首先你要...
C++对指针有点疑惑不解
int *p=&a;晕,居然还有这种问题啊 在这里是初始化,是对变量进行初始化,在这语句中的变量是p而不是*p,因此对变量p进行初始化就要使用与该变量相应的值来进行初始化,因为变量p是指针,所以需要a的地址来初始化。再比如吧 int p[2]={1,2};在这里也是对变量p进行初始化,而不是对p[2]进行...
【面试常考题】C++的智能指针
智能指针的核心思想是通过类的封装,利用C++的类特性,尤其是默认的构造和析构函数。当我们创建一个智能指针对象时,它会自动管理内存的生命周期,确保在对象不再使用时,内存会被正确释放。这样,即使在出现问题时,也能保证内存的正确清理,降低了编程时的复杂性。掌握智能指针的关键在于理解其内部机制,...
有关C++函数调用问题。不明白里面的指针和&的用法。
C++调用函数的时候就是转向函数的入口地址,而函数指针就是保存的函数的入口地址所以你使用发fp(a,b)调用就相当于函数名调用你使用(*fp)(a,b)调用相当于把a,b作为参数,传递到fp指向的地址所以效果是一样的其实函数调用的时候使用函数名 f_i(a,b) 和 (*f_i)(a,b) 也能得到正确的结果道理...