两个简单的指针函数如下:
以上的输出分别是10 20和20 10。即正常的函数形参只代表实参的值,另开辟一个空间进行计算,因此,在函数体执行完之后,若没有返回值,则这个函数内的计算结果全部清除。
而第二个为指针函数,可以改变实参的值。要知道的是:指针变量也有地址,在该例中,输出以下内容标记:
在输出,a指向的地址,指的指针变量a的值,而存储a的地址指的是对于*a变量而言也需要有存储地址,因此,指针函数是把存储原变量的地址传入,然后在函数内部使用地址 *** 作的方式进行计算和改变,因此相当于直接对函数体外的实参进行修改,因此会改变实参的值。
从输出的指针变量的地址可以看出,指针变量的地址使用使用十六进制的数来输出,也可以使用十进制输出地址:ip2decimal(&a)。同时,在64位系统中,指针变量的大小为8个字节(1 byte = 8 bit)。
C++中,arr[1]和*(arr+1)是等价的。数组的名字代表数组第一个元素的地址:
arr= &arr[0]=address of first element of array
如下两种程序写法都能够完成冒泡排序:
在该方法中,未使用返回值,直接使用指针传递,可以改变实参(函数结构体外)的值。另外,也可以直接将函数头写为:
void bubblesort2(int arr[], int num)
因此,数组第i个元素可以表示为:arr[i]=*(arr+i),数组第i个元素的地址可以表示为:&arr[i]=arr+i。另外,在C++中,只有在函数头中,int *arr和int arr[]含义相同,都是一个int指针。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)