我是C/C++编程新手,我仍然在学习指针数据类型之间的一些差异。但我在努力与这些中的一个:指针数据类型之间的区别C
int *const x1;
const int *x2;
char *x3[3];
char (*x4)[3];
double* x5, x6;
我第一个想到的应该是一个整数变量指向一个常量内存地址
而x2
应该是一个整数指针,它是const的,对不对?
我不知道这是否正确。那么任何人都可以解释他们之间的差异吗?
我是C/C++编程新手,我仍然在学习指针数据类型之间的一些差异。但我在努力与这些中的一个:指针数据类型之间的区别C
int *const x1;
const int *x2;
char *x3[3];
char (*x4)[3];
double* x5, x6;
我第一个想到的应该是一个整数变量指向一个常量内存地址
而x2
应该是一个整数指针,它是const的,对不对?
我不知道这是否正确。那么任何人都可以解释他们之间的差异吗?
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
最后一个例子不应该这样写。 “*”属于变量名称,因此星号应该与其他声明的名称一样。 – Olaf
的阵列3您READ C向后声明符。因此,“int * const”是一个指向int的常量指针(你可以改变int,但不能在初始化之后将指针指向其他地方);而“const int *”是一个指向常量int的指针(改变指针所有你喜欢的,但不是它所指向的int)。
“C语句的语法是一个失败的实验。”根据Bjarne Stroustrup。
int *const x1;
恒定指针int
,这意味着指针不能被改变为指向任何东西。
const int *x2;
指向int
常数。这里的整数是恒定的,这意味着你不能改变这个值。
char *x3[3];
阵列(长度3)的指针到char
char (*x4)[3];
指针炭(长度为3的)的阵列
double* x5, x6;
x5
是指针翻一番,x6
是只是一个double
变量
注意:'int * a'是一个指针,'int a [2]'也是一个指向2个值的指针(数组)。 'int * a [2]'是一个指向数组的指针。它可能会帮助你理解 – Hearner
@Hearner:'int a [2]'是**不是**指针(尽管在某些情况下它可能会衰减*)。 –
@Hearner'int * a [2]'是一个指针数组。 –