指针使用汇总
例1:
struct Data {
uint32 year;
uint32 month;
uint32 data;
uint32 day;
};
typedef struct Data SData;
SData data;
void testMain()
{
SData *psData;
psData = &data; /* 正确.指向结构首地址. */
psData = data; /* 错误.编译报错 */
psData = ( SData * )data; /* 错误.编译报错 */
psData->year = 2007;
}
结论1:结构变量的变量名,不表示变量的地址,强制转换都不行,说明结构变量的变量名本质上就不是表示一个数值,所以,必须使用取址运算符。
例2:
struct Data {
uint32 year;
uint32 month;
uint32 data;
uint32 day;
};
typedef struct Data SData;
SData data[] =
{
2001,1,1,1,
2001,1,1,2,
2001,1,1,3,
2001,1,1,4,
2001,1,1,5,
2001,1,1,6,
};
void testMain()
{
SData *psData;
psData = &data[0]; /* 正确.指向数组首地址 */
psData = data; /* 正确.指向数组首地址 */
psData = ( SData * )&data; /* 正确.指向数组首地址 */
// psData = &data; /* 错误.编译报错 */
psData->year = 2007;
psData++;
psData->year = 2007;
psData++;
psData->year = 2007;
psData++;
psData->year = 2007;
}
结论2:数组名指向数组的首地址,对数组名取址运算,仍然表示该数组的首地址。
测试环境:ADS1.2编译器,ARM,LPC2214,软件仿真环境
例1:
struct Data {
uint32 year;
uint32 month;
uint32 data;
uint32 day;
};
typedef struct Data SData;
SData data;
void testMain()
{
SData *psData;
psData = &data; /* 正确.指向结构首地址. */
psData = data; /* 错误.编译报错 */
psData = ( SData * )data; /* 错误.编译报错 */
psData->year = 2007;
}
结论1:结构变量的变量名,不表示变量的地址,强制转换都不行,说明结构变量的变量名本质上就不是表示一个数值,所以,必须使用取址运算符。
例2:
struct Data {
uint32 year;
uint32 month;
uint32 data;
uint32 day;
};
typedef struct Data SData;
SData data[] =
{
2001,1,1,1,
2001,1,1,2,
2001,1,1,3,
2001,1,1,4,
2001,1,1,5,
2001,1,1,6,
};
void testMain()
{
SData *psData;
psData = &data[0]; /* 正确.指向数组首地址 */
psData = data; /* 正确.指向数组首地址 */
psData = ( SData * )&data; /* 正确.指向数组首地址 */
// psData = &data; /* 错误.编译报错 */
psData->year = 2007;
psData++;
psData->year = 2007;
psData++;
psData->year = 2007;
psData++;
psData->year = 2007;
}
结论2:数组名指向数组的首地址,对数组名取址运算,仍然表示该数组的首地址。
测试环境:ADS1.2编译器,ARM,LPC2214,软件仿真环境