c++用(void *)和直接用*对数组名取地址有什么区别

问题描述

c++用(void *)和直接用*对数组名取地址有什么区别

char ch[5]="asdf";
cout<<(void * )ch;
cout<<* ch;
编译输出是一样的
有什么区别?

解决方案

就你这个例子来说,没有什么区别。但是对于结构体等复杂类型,区别就大了,void *得到的指针,如果你对它相加,可能和你用struct的指针相加得到的地址完全不同。
指针的类型决定了一个数据单位的大小。

解决方案二:

C++拾遗之对数组名取地址
对数组名取地址

解决方案三:

个人感觉还是 * ch 好一些,很少看见void*

解决方案四:

void*是任意类型

char* 是指定类型

解决方案五:

任意类型都能向(void*)转换

解决方案六:

void主要用来转换。没啥区别

解决方案七:

void * 不能判断属性的长度和一些属性, 只知道地址。 主要用来转换。

时间: 2024-11-01 01:28:47

c++用(void *)和直接用*对数组名取地址有什么区别的相关文章

数组首地址取地址

一.问题来由 普通指针可被修改导致地址偏移: #include <iostream> using namespace std; int main(int argc,char *argv[]) { int a = 6; int *p = &a; //p存放一个地址,pp存放p的地址,上面的代码可以让p存放的地址偏移 cout<<&a<<endl; int *pp = (int *)&p; cout<<p<<endl; (*p

探讨C++中数组名与指针的用法比较分析_C 语言

指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.但是数组名有些地方又不同于指针.这里将数组名与指针用法的不同做一下总结(有些资料来自互联网),不妥之处,还望指正!(本文程序在WIN32平台下编译):1.数组名和指向那个数组的指针,地址相同,但大小不同用例子来说明: 复制代码 代码如下: #include "stdafx.h"#include <iostream>using namespace std;int _tmain(int

C/C++中利用数组名/指针进行排序实例

在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子. 以下两个例子要非常注意,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址. #include <stdio.h>void main(void){void reversal();static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */int i;for (i=0;i<10;i++){printf("%d ",a);}printf

c语言-C语言 数组问题 这俩有什么区别

问题描述 C语言 数组问题 这俩有什么区别 int (*a)[10]; 与int a [10]的区别两者的return a;分别返回的是什么还有两者的元素怎么引用 解决方案 这两者很不同. int a[10];这里的a是一个常量,表示数组的首地址.数组存储的是int型数据. int (*a)[10]; 这里的a是一个指针变量,指向一个数组,数组存储的是10个int型数据. 解决方案二: 一个是指针,一个是数组,用sizeof求值,以及free的时候都是不同的. 解决方案三: int (*a)[1

指针-数组名进行类型强制转换的问题

问题描述 数组名进行类型强制转换的问题 int main(void) { int a[4] = {1, 2, 3, 4}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%x, %x/n", ptr1[-1], *ptr2); return 0; } 为什么ptr2指向a[0]的第二个字节? 个人理解是数组名a是指向a[0]的指针,强制转换为int型变量,再加1,就相当于将原来所存放a[0]的地址当作

用数组名做函数参数(转)

可以用数组名作函数参数,此时实参与形参都应用数组名(或指针变量). 例2:有一个一维数组score,内放10个学生成绩,求平均成绩. float average(float array[10]){              int i;       float aver,sum=array[0];               for(i=1; i<10; i++)sum=sum+array[i];            aver=sum/10;            return aver; }

vb中,用变量作为数组名可以吗

问题描述 vb中,用变量作为数组名可以吗 vb中,用变量作为数组名可以吗? 例如 arrrrstr()=("as","se") for i=0 to 1 for j=1 to 25 linestr=aeerrstr(i)(j)&"," next j next i 解决方案 将arrstr(i)作为变量名?可以的 解决方案二: 好久不用VB了, 好像是這樣的 dim arrrrstr(2,25) as string 解决方案三: Agoni

c语言,数组,数组名表示首地址

问题描述 c语言,数组,数组名表示首地址 c语言中为什么数组名a和&a的输出结果是一样的,a不是本来就是地址吗 解决方案 应该是a和&a都被编译器解释成数组的首地址了. 解决方案二: 你说的没错,a是表示数组首元素的地址,但是 你要知道它是一个指针常量,即 一个不能被更改的值.对于printf(""%dn""a);和printf(""%dn""&a);,输出的格式是 %d所以有没有&编译器都不做

基础入门:解密数组名本质

现在到揭露数组名本质的时候了,先给出三个结论: (1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组: (2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量: (3)指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4),仅仅意味着数组的存放地址! 1.数组名指代一种数据结构:数组 现在可以解释为什么第1个程序第6行的输出为10的问题,根据结论1,数组名str的内涵为一种数据结构,即一个长度为10的char型数组,所以sizeof(str)的结果