是否可以“宏定义(#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;