我是C / C ++编程的新手,我还在学习指针数据类型之间的一些差异。但我在努力解决这些问题:
int *const x1;
const int *x2;
char *x3[3];
char (*x4)[3];
double* x5, x6;
我认为第一个应该是指向常量内存地址的整数变量
x2
应该是一个const的整数指针,对吗?
我不知道那是对的。那么有人能解释一下他们之间的差异吗?
答案 0 :(得分:3)
int *const x1; // const pointer to int
// x1 is const pointer, so it cannot point to anything else (once initilized),
// but what it points to can changed
const int *x2; // pointer to const int
// x2 can points to something else,
// but what it points to cannot be changed
char *x3[3]; // array of three pointers to char
// (array of pointers)
char (*x4)[3]; // pointer to array of three char
// (single pointer)
double* x5, x6; // x5 is pointer to double, x6 is just a double
答案 1 :(得分:2)
对于此类问题,您可以查看cdecl,例如第三个例子:
SELECT t.timeStart,
MAX(CASE WHEN t.rnk = 1 THEN t.scanner END) as scanner1,
MAX(CASE WHEN t.rnk = 2 THEN t.scanner END) as scanner2,
MAX(CASE WHEN t.rnk = 3 THEN t.scanner END) as scanner3,
MAX(CASE WHEN t.rnk = 4 THEN t.scanner END) as scanner4,
SUM(t.scanner as total_scanner
FROM(
SELECT s.*,
ROW_NUMBER() OVER(PARTITION BY s.TimeStart ORDER BY s.scanner) as rnk
FROM YourTable s) t
cdecl返回:
将x3声明为指向char
的指针的数组3
和你的第四个例子:
char *x3[3];
cdecl返回:
将x4声明为指向char
的数组3的指针
答案 2 :(得分:2)
你向后读C声明符。 “int * const”因此是一个指向int的常量指针(你可以改变int,但是在初始化之后不要使指针指向别处);而“const int *”是一个指向常量int的指针(改变你喜欢的指针,但不是它所指向的int)。
“C声明符语法是一个失败的实验。”据Bjarne Stroustrup说。
答案 3 :(得分:2)
int *const x1;
指向int
的常量指针,表示指针无法更改为指向任何内容。
const int *x2;
指向int
常量的指针。这里整数是常量,这意味着你不能改变它。
char *x3[3];
指向char
char (*x4)[3];
指向char
的数组(长度为3)的指针double* x5, x6;
x5
是指向double的指针,x6
只是double
变量