数组和指针不同

时间:2017-04-10 23:45:08

标签: c arrays pointers char

我目前正在通过K& R来学习C.作者做了一个重要的区别,指针和数组确实表现相似,但它们是不同的,因为指针是一个变量,可以指向不同的东西,而数组不有这种能力。

我理解这一点,但以下代码让我有点困惑:

int len, nlines; 
char *p, line[MAXLINES]; /* Confusing part */

我知道当你将一个数组传递给一个函数时它会衰减成一个指针,但是在这里你可以在同一行声明一个字符指针和一个字符数组,即使它们不同?也许我在困惑自己,但这对我来说很奇怪。谢谢!

3 个答案:

答案 0 :(得分:3)

这只是在同一行上声明多个变量,并且相当于:

char *p; // Pointer
char line[MAXLINES]; // Fixed-sized character array

除了基本类型以及在源代码中声明它们之外,它们之外没有任何关联。

答案 1 :(得分:0)

从我记忆中来看,实际上并没有让人感到困惑。如果您查看该行,则代码中的,会将*plines[MAXLINES]分开。因此,用户正在声明两个不同的变量。

你可以这样看:

char *p; //Pointer due to the asterik (*)
char line[MAXLINES]; //Array because of []

同样适用于int len, nlines;

int len; //First int var
int nlines; //Second int var

我们只在一行上编写var,以使其看起来干净。除此之外,两者之间没有区别。

答案 2 :(得分:-3)

它们在一切都是一样的 你可以声明一个指针并将其用作数组

int *ptr,arr[10],value=5;
ptr[0]=value;
*(arr)=value;

但区别在于数组是常量指针