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

有一块内存,其中存放了一组二维的数据;
现在想宏定义一个指针,指向该块内存,是否可行?若可行,如何做?
是宏定义(#define)一个指针,而不是定义一个指针。

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

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


举例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);

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-12
可以,举例说明:
#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本回答被提问者和网友采纳
第2个回答  2016-01-06
可以,举例说明:
#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
第3个回答  2013-10-14
可以的。
define就是简单的替换,应该能满足lz的要求的。
第4个回答  2013-10-14
这个好像不可行,
不过可以利用类型定义实现:
如:
typedef int* PINT;