1. 指针和指针变量有什么区别呢?
int a=3;
int *p;
p=&a;
现在我们来看一下。a=3这个式子先解释一下
等式右边是常量,左边是变量。
同理的
p=&a,左边的是指针变量,右边的是常量(这个常量就是指针地址的数值)
2. 为什么要用指针变量作为函数参数?
将一个变量的地址传送到另一个函数中。
3. 为什么有了数组表达还要指针?
使用指针要比使用数组下标快2倍。
4. 如何通过指针遍历一个数组中的所有元素?
for(p=a;p<&a[max];++p)
{
/*do something*/
}
5. 数组作为参数传递给函数时,可以通过sizeof得到数组的大小吗?
因为函数的数组参数相当于该数组第一个元素的指针。--这样意味把数组传递给函数的效率非常高。
6. 数组名为什么不可以放在赋值运算符的左边?
它不是一个左值,更不是一个可修改的左值。一个数组是一个对象,而它的数组名就是指向这个对象的第一个元素的指针。
给数组名赋值是毫无根据的。
7. 调用函数结束后,形参单元被释放是什么意思?
在调用函数时,函数代码本身存放在程序区,函数的参数、函数内部开设的非静态变量只在函数被调用时才在堆栈中临时申请空间,函数的参数的取值被放置到栈空间的变量中,函数一旦调用完毕,这些栈空间就会被释放,包括参数空间和函数自定义变量空间。
8. 数据从实参到形参的传递是通过什么完成?
在函数调用时给形参分配相应的内存单元,同时将实参的“值”复制给形参。
9. 程序中,当调用函数时,实参与形参各占一个独立的存储单元。这句话对吗?
如果是普通的形参如int f(int x){}
那么形参是占独立的存储单元
调用函数的时候 把实参拷贝给形参
当函数调用结束的时候
形参所占用的存储单元就会被释放
如果形参是指针或者引用的话
如int f(int *x){}或int f(int &x){}
这时形参和实参就指向了相同的存储单元
无论哪个值被改变了 另外一个也随之改变
10. 用数组作为函数形参和用指针作为函数形参,有什么不同?
指针可以改变,可以通过指针改变指向内容的值,但数组名不行。