数组和指针————C语言学习笔记1

C语言中,数组是数组,指针是指针,两者是完全不同的,通俗的话来说,一个是地址符号,一个是存储变量地址的变量。

 

但是有时候他们又是可以相同的。

 

于是首先,我们应该知道两者在什么时候是“相似”的。
1、“表达式中的数组”就是指针;
2、C语言把数组下标作为指针的偏移量;
3、“作为函数参数的数组名”等同于指针;

对数组的引用如a[i]在编译时总是被编译器改写成*(a+i)的形式。C语言之所以把数组形参转换为指针是处于效率的考虑,由于不可能对整个数组进行拷贝,而是“所有的数组在作为参数传递时都转化为指向数组起始地址的指针”。
摘自《Expert C Programming》---Peter Van Der Linden

手动实验1:
[lanux@localhost Program]$ cat pointer_and_array_01.c
#include <stdio.h>

char ga[8]="goblecha";

void print_array(char arr[])
{
   printf("/nIn Function print_array:/n");
   printf("arr    address,on goble ga:%d/n",&arr);
   printf("arr[0] address,on goble ga:%d/n",&(arr[0]));
   printf("arr[1] address,on goble ga:%d/n",&(arr[1]));
}

void print_pointer(char *ptr)
{
    printf("/nIn Function print_pointer:/n");
    printf("ptr    value,  on goble ga:%d/n",&(*ptr));
    printf("ptr    address,on goble ga:%d/n",&ptr);
    printf("ptr[0] address,on goble ga:%d/n",&(ptr[0]));
    printf("ptr[1] address,on goble ga:%d/n",&(ptr[1]));
    printf(" ++ptr   value,on goble ga:%d/n",++ptr);
}

main()
{

   printf("/nIn the main:/n");
   printf("goble ga    adrress:%d/n",&ga);
   printf("goble ga[0] address:%d/n",&(ga[0]));
   printf("goble ga[1] address:%d/n",&(ga[1]));
   print_array(ga);
   print_pointer(ga);
   printf("/n");
   return 0;
}
[lanux@localhost Program]$ gcc -W pointer_and_array_01.c -o test
[lanux@localhost Program]$ ls
a.out  notes.1  pointer_and_array_01.c  test
[lanux@localhost Program]$ ./test

In the main:
goble ga    adrress:134519160
goble ga[0] address:134519160
goble ga[1] address:134519161

In Function print_array:
arr    address,on goble ga:-1077022384
arr[0] address,on goble ga:134519160
arr[1] address,on goble ga:134519161

In Function print_pointer:
ptr    value,  on goble ga:134519160
ptr    address,on goble ga:-1077022384
ptr[0] address,on goble ga:134519160
ptr[1] address,on goble ga:134519161
 ++ptr   value,on goble ga:134519161

[lanux@localhost Program]$
 

初始化的全局变量ga存储在全局区,而存储在栈区的函数参数变量,如arr[],*ptr,其实都是一个指针,即一个存储地址的变量(这里存储的地址指向全局字符数组ga)。

 

01:26:10

你可能感兴趣的:(数组和指针————C语言学习笔记1)