四 数组和指针

01 数组名代表数组在内存中的首地址,表示的是地址信息,因此数组名可以理解为一个指针,不过数组名是一个常量,不能改变.

#include <stdio.h>

int main()
{
    
    char name[]="haha";
    
    char name1[]="gggg";
    
    char name3[2][10] = {"fffff","jjjjj"};
    
    printf("%s\n",name3[0]);
    
    
    
    
    
    
    
    
    
    
    
    
    
    return 0;
}

 

02 指向数组的指针:定义指向数组的指针就是将数组的首地址赋值给指针变量.

如:int a[10];

   int *p; p=&a[0];

p=&a[0]等价于p=a            

#include <stdio.h>

int main()
{
    
    char name[]="haha";
    
    char name1[]="gggg";
    
    char name3[2][10] = {"fffff","jjjjj"};
    
    printf("%s\n",name3[0]);
    
    
    
    
    
    
    
    
    
    
    
    
    
    return 0;
}

 

03 通过指针引用数组元素:p+i表示a[i]的地址,*(p+i)表示数组元素a[i]

04 可以改变指针变量的值,但指针常量不可改变.指针运算符的优先级最高

05 多维数组和指针:

x[i]等价于*(x+i)

&x[i]等价于x+i

/*
 1.数组元素的访问方式
 int ages[5];
 int *p;
 p = ages;
 1> 数组名[下标]  ages[i]
 2> 指针变量名[下标] p[i]
 3> *(p + i)
 
 2.指针变量+1,地址值究竟加多少,取决于指针的类型
 int *   4
 char *  1
 double * 8
 */

#include <stdio.h>

void chang(int *array);

int main()
{
    
    int ages[] = {10,5,55,66,45};
    
    chang(ages);
    
    return 0;
    
}

void chang(int *array)
{
    printf("%d\n",array[2]);
    
}

 

06 指向多维数组元素的指针变量:

指向由m个元素组成的一维数组的指针变量的定义为: 类型名(*指针变量名)[长度]; 如:int(*pa)[4];

07 字符串和指针:

在对字符串中的字符进行存取时,可以定义一个指针变量,指向字符串中的第一个字符,再利用指针的移动来访问字符串中得字符