指针问题

Posted low-ctfer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针问题相关的知识,希望对你有一定的参考价值。

易出错点:

计算数组的元素和(错误)

int sum(int a[]) {

  int ans = 0;

  for(int i = 0; i < sizeof(a); i++)

    ans += a[i];

return ans; }

 

这个函数是错误的,因为sizeof(a)无法得到数组的大小。为什么会这样?因为把数组作 为参数传递给函数时,实际上只有数组的首地址作为指针传递给了函数。换句话说,在函数 定义中的int a[]等价于int *a。在只有地址信息的情况下,是无法知道数组里有多少个元素 的。正确的做法是加一个参数,即数组的元素个数。

 

正确代码:

int sum(int* a, int n) {

  int ans = 0;

  for(int i = 0; i < n; i++)

    ans += a[i];

return ans; }

 

在上面的代码中,直接把参数a写成了int* a,暗示a实际上是一个地址。在函数调用时a 不一定非要传递一个数组,例如:

int main() {

  int a[] = {1, 2, 3, 4};

  printf("%d ", sum(a+1, 3);

  return 0;

}

注意,这样算出来的是2+3+4。a+1指的是起始地址为啊a【1】而不是a【0】。

以上是关于指针问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言的指针传递,指针的指针的问题,谁能帮我分析分析这个问题?

C 语言二级指针案例 ( 多级指针内存释放问题 | 多级指针避免野指针 )

关于C语言里面指针赋值的类型问题,还有一些关于指针的问题

指针数组与二级指针问题

关于二级指针与一级指针相互转换的问题!

指针指针的 const 问题