指针数据类型之间的差异C.

时间:2016-06-13 11:20:59

标签: c pointers

我是C / C ++编程的新手,我还在学习指针数据类型之间的一些差异。但我在努力解决这些问题:

int *const x1;
const int *x2;
char *x3[3];
char (*x4)[3];
double* x5, x6;

我认为第一个应该是指向常量内存地址的整数变量 x2应该是一个const的整数指针,对吗?

我不知道那是对的。那么有人能解释一下他们之间的差异吗?

4 个答案:

答案 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

的数组(长度为3)
char (*x4)[3];

指向char

的数组(长度为3)的指针
double* x5, x6;

x5是指向double的指针,x6只是double变量