数组和指针相关问题

苏嵌                                                                                                                              项目实战

学习日志                                     姓名:                      日期:

 

 

 

今日学习任务

  1. 数组常见问题
  2. 指针
  3. 指针运算
  4. 常量指针和指针常量
  5. 空指针及其应用
  6. 指针数组和数组指针
  7. 函数指针和指针函数

今日任务完成情况

基本完成

 

今日未解决问题

其他

 

 

问题一:定义一维数组要注意哪些问题?

        答:定义一维数组的一般形式:

                         类型符 数组名[常量表达式]

要注意以下几点:

  • 数组名的命名规则和变量名相同,遵循标识符命名规则。
  • 定义数组时要制定数组中元素个数,方括号中的常量表达式就是元素个数。
  • 定义数组a[n],则数组的下标是从0到n-1,即a[n]是取不到的。
  • 常量表达式可以包括常量和常量符号,比如 int a[3+5];是合法的,不能包含变量,如int a[n];是不合法的
  • 如果在被调用的函数(不包括主函数)中定义数组,其长度可以是变量或变量表达式,如

void fun(int n)

{

          Int a[n];

          …

}

这样定义数组是合法的。

 

问题二:数组作为参数传递给函数时,可以通过sizeof得到数组大小吗?

          答:不能。当把数组作为函数参数时,无法在程序运行是通过数组参数告诉函数该数组本身的大小,因为函数的数组参数相当于指向该数组第一个元素的指针。

 

问题三:指针是什么?指针本身有地址吗?

          答:指针就是地址。当指针指向一个变量时,指针所指向的是该变量存在的地址。指针本身也是有地址的。

 

问题四:指针运算有什么意义?

          答:指针的运算有加减运算。如果指针是指向数组的话,那加减就有意义了。指针加表示该数组的下一个元素地址,指针减表示该数组的上一个地址。指针是没有乘除法的。

 

问题五:如何引用指针指向的数的值?

          答:指针指向一个数后,通过指针引用他可以在指针前加一个*。不如定义指针int a=10;int *p=&a;可以用printf(“%d”,*p);得到a的值。

 

问题六:常量指针和指针常量有什么区别?

          答:常量指针表示指针指向一个常量,并且该常量不能通过引用改指针修改。比如const int *p=’a’;如果这样:*p=’b’;就是错误的,但指针本身的的地址是可以改变的,可以进行指针运算,如p++。指针常量是指针不能进行指针运算,即指针所指向的地址不能改变,但指针所指向地址的值是可以改变的。

 

问题七:什么是空指针?空指针有什么用?

          答:空指针是不指向任何对象的指针。空指针的值是NULL,即0。空指针可以作为一个链表的终值。如果一个链表的最后一个指针指向NULL,则该链表已经结束。

 

问题八:指针数组和数组指针的区别?

          答:指针数组表示数组中的每一个值都是指针,数组指针表示指向数组的指针。如int (*p)[4],表示指向一个有四个元素的一维数组的指针。

 

问题九:函数指针与指针函数的区别?

          答:函数指针表示指向这类函数的指针,如int (*p)(int *)表示定义一个指针,改指针指向返回值是int型,有一个int *型参数的这一类函数。指针函数表示返回值是指针的函数,如int *fun(int)表示返回值是一个int*型的指针。

 

问题十:什么是void指针?

          答:定义一个void指针,如void *p;则p就是一个纯地址指针,如果把a的地址赋给p,即p=&a;则p得到a的纯地址,但p不指向a,不能通过p得到a的值。

你可能感兴趣的:(数组和指针相关问题)