问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

是否可以“宏定义(#define)”一个指针,指向一个二维数组?

发布网友 发布时间:2023-08-17 04:38

我来回答

5个回答

热心网友 时间:2024-08-17 15:24

请理解,宏定义就是在进行编译的同时,将使用此宏定义的代码位置全部进行替换后再编译。

如果只是定义了某个宏定义,而没有使用的位置的话,编译后生成的机器码或可执行文件是不包含与此宏定义相关的内容的。


举例1:


#define GLOBAL
#define STATIC  static
#define CONST   const
#define DECLARE_A_POINTER    char* wcCharPointer


以上几行写在文件头部编译没有问题,但是wcCharPointer的指针变量是不存在的。


举例2:


#define GLOBAL
#define STATIC  static
#define CONST   const
#define DECLARE_A_POINTER    char* wcCharPointer
GLOBAL DECLARE_A_POINTER = (char*)(0x04000000);


以上几行写在文件头部编译没有问题,而且之后的代码中可以对wcCharPointer指针变量进行赋值了,此时才是真正定义了一个指针变量。


不知楼主是否理解了。

追问若我想宏定义一个标号,当作指针来使用;该标号指向一块二维数据所在内存,如下:

#define POINTER (char (*)[10])(0x1234)

上述这种宏定义是否有问题,若有,请问问题出在哪里,谢谢

追答

你上面的写法不可以,编译不过。

我有点明白你想说什么了,你想用宏定义定义出来个指针变量,还不想在宏定义里面指定变量名称。

但是变量的名称你在代码中必须要指定的,就算宏定义里面不包含,在你使用宏定义的位置也必须给出来。

我感觉你还是没真正理解宏定义的真正含义,建议先去了解一下比较好。


要想在代码中指定特定的名称至少也得写成下面的这样


#define   POINTER(name)   char *(name)[10]
POINTER(My_PointerIndex);

热心网友 时间:2024-08-17 15:25

可以,举例说明:
#define MYPOINTER (unsigned char *)a
int a[5][10];
unsigned char *p;
int i,j;
for ( i=0;i<5;i++ ) for ( j=0;j<10;j++ ) a[i][j]=i*10+j; //给数组赋值
for ( i=0,p=MYPOINTER ;i<5*10*sizeof(int);i++,p++ ) *p=0; //用指针将数组清0
for ( i=0;i<5;i++,printf("\n") ) for ( j=0;j<10;j++ ) printf("%02d ",a[i][j]); //输出查看结果
运行结果是数组全部被清0

热心网友 时间:2024-08-17 15:25

可以,举例说明:
#define MYPOINTER (unsigned char *)a
int a[5][10];
unsigned char *p;
int i,j;
for ( i=0;i<5;i++ ) for ( j=0;j<10;j++ ) a[i][j]=i*10+j; //给数组赋值
for ( i=0,p=MYPOINTER ;i<5*10*sizeof(int);i++,p++ ) *p=0; //用指针将数组清0
for ( i=0;i<5;i++,printf("\n") ) for ( j=0;j<10;j++ ) printf("%02d ",a[i][j]); //输出查看结果
运行结果是数组全部被清0

热心网友 时间:2024-08-17 15:26

可以的。
define就是简单的替换,应该能满足lz的要求的。

热心网友 时间:2024-08-17 15:26

这个好像不可行,
不过可以利用类型定义实现:
如:
typedef int* PINT;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
天涯论坛的网址是什么啊? 如何辨别天涯社区的官方网站? 天涯社区的官方网址是什么呀? 嘉陵火星人(150CC)报价 广西能上150C的摩托车牌吗 隆鑫200cc和150cc的发动机怎么辨认_百度问一问 150cc大船摩托车问题!请高手帮我·· 我想问问这是125cc还是150cc 滁州琅琊山的门票要多少钱 为什么手机连上WiFi却无法上网了? 速生桉冬天还能长吗,冬天适合放肥料吗 速生桉是什么东西? 万达广场姑苏区能买吗? 电脑看视频缓冲速度慢了 下载速度也慢了 为什么下载好的视频在看很慢 一卡一卡的 见深吕禄忧的翻译是什么 怎么注销实名认证 2010年的好日子! 女1985阴历9月24日晚6点到7点之间出生。 男1984阴历6月 9日中午12点左... 女1985年腊月三十,男1986年六月二十八,2012年最好的结婚日是哪天? 女1982年9月1日生,男1983年2月8日生(均为公历)。求2010年8月后结婚的... 财务为什么会显示数据替换不成功 每个学校都有工会吗 如何注销实名认证 ...如何才能从浩瀚的文件中查找出含有我需要内容的文档。 如何使用excel中的日期周期函数公式? 怎样订7月6日的火车票 7月份的火车票什么时候可以买 七月份的火车票什么时候可以买? 我想买7月6号的火车票,说是提前10 买,那我是哪天去买啊,怎么算? ...个N*N(N的值宏定义为4,数组结构如下图)的二维数组,编程完成以下要求... 怎么样定义一个常量的二维数组 定义一个函数将二维数组中的对角线内容求和并作为函数的返回值,编写... ...在一个figure中画了几条曲线,怎么调节上下层次关系? 361裤子尺码偏大还是偏小 dreamweaver插入图像为什么会有描边 cdr表格厘米部分描边和其他不一样怎么回事 生殖系统健康的表现有哪些? ...同学的学生证买火车票,可以吗?火车站都会刷磁条吗?是不是会影响人家... word非突出显示是什么意思 毛毛虫之死读后感 挂完头孢吃红烧肉,但是肉里面放了点酒能吃吗 崇祯这么敬业的老板,为什么得罪了所有员工 手机sy(by)是什么意思 亲知闻知说知是什么意思 cdma的sim卡能不能用在支持hsdpa的手机上 渝北区新城芳居宽带网络换成光纤了吗?带宽最大支持多少? 渝北区渝航路三巷可以牵哪些宽带 阿月历险记2.0下载 电容43nj表示什么yis