C语言中指针与数组的关系是怎样的?

2026-04-16 20:211阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计733个文字,预计阅读时间需要3分钟。

C语言中指针与数组的关系是怎样的?

1. 数组名不是指针,类似指针(可以将数组名直接赋值给指针)。 (1)数组名的内涵在于其指向的实际实体是一种数据结构,这种数据结构就是数组; (2)数组名的扩展在于其可以转换为指向其的指针。

1.数组名不是指针,神似指针(可以将数组名直接赋值给指针)

(1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;
(2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;
(3)指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4),仅仅意味着数组的存放地址!

2.数组名只能被看作一个指针常量,不能被修改

int intArray[10]; intArray++;//错误

3.作为函数形参

(1)数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;
(2)很遗憾,在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。

所以,数组名作为函数形参时,其全面沦落为一个普通指针!

4.a是数组时,a 和 &a的区别

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

int *p=a;//定义一个int型指针p,指向第一个元素的地址

int aa[2][5]={0,1,2,3,4,
5,6,7,8,9};

int (*p)[5]=aa;//定义一个int [5] 型指针p,等价于int (*p)[5]=&aa[0];

5.数组,引用和指针

int *ptrs[10];//Y,数组,10个int型指针

int &refs[10];//N,没有引用的数组,

int (*Parray)[10]=&arr; //指针,10个int型数据的数组——————和数组名的区别?

int (&Parray)[10]=arr;//数组的引用,10个int型数据的数组————和数组名的区别?

int *(&Parray)[10]=arr;//数组的引用,10个int型指针的数组————和数组名的区别?

int ia[]={0,1,2,3,4,5}; auto ia2(ia);//ia2是一个整型指针int *,只想ia的第一个元素: auto ia2(&ia[0]) ia2=42;//× decltype(ia) ia3={0,1,2,3,4,5};//ia3是一个6个整数的数组 ia3=p;//不能把整形指针赋值给数组

5.1数组的begin和end操作

constexpr size_t sz=5; int arr[sz]={1,2,3,4,5}; auto n=end(arr)-begin(arr);//n=5,类型为带符号的ptrdiff_t(头文件cstddef)

5.2 数组的下标和指针

int *p=&a[2]; int j=p[1];//a[3] int k=p[-2];//a[0]

C语言中指针与数组的关系是怎样的?

6.

unsigned score[3]={4,2,3}; for (auto i : score) cout<<i<<" ";//4,2,3

本文共计733个文字,预计阅读时间需要3分钟。

C语言中指针与数组的关系是怎样的?

1. 数组名不是指针,类似指针(可以将数组名直接赋值给指针)。 (1)数组名的内涵在于其指向的实际实体是一种数据结构,这种数据结构就是数组; (2)数组名的扩展在于其可以转换为指向其的指针。

1.数组名不是指针,神似指针(可以将数组名直接赋值给指针)

(1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;
(2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;
(3)指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4),仅仅意味着数组的存放地址!

2.数组名只能被看作一个指针常量,不能被修改

int intArray[10]; intArray++;//错误

3.作为函数形参

(1)数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;
(2)很遗憾,在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。

所以,数组名作为函数形参时,其全面沦落为一个普通指针!

4.a是数组时,a 和 &a的区别

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

int *p=a;//定义一个int型指针p,指向第一个元素的地址

int aa[2][5]={0,1,2,3,4,
5,6,7,8,9};

int (*p)[5]=aa;//定义一个int [5] 型指针p,等价于int (*p)[5]=&aa[0];

5.数组,引用和指针

int *ptrs[10];//Y,数组,10个int型指针

int &refs[10];//N,没有引用的数组,

int (*Parray)[10]=&arr; //指针,10个int型数据的数组——————和数组名的区别?

int (&Parray)[10]=arr;//数组的引用,10个int型数据的数组————和数组名的区别?

int *(&Parray)[10]=arr;//数组的引用,10个int型指针的数组————和数组名的区别?

int ia[]={0,1,2,3,4,5}; auto ia2(ia);//ia2是一个整型指针int *,只想ia的第一个元素: auto ia2(&ia[0]) ia2=42;//× decltype(ia) ia3={0,1,2,3,4,5};//ia3是一个6个整数的数组 ia3=p;//不能把整形指针赋值给数组

5.1数组的begin和end操作

constexpr size_t sz=5; int arr[sz]={1,2,3,4,5}; auto n=end(arr)-begin(arr);//n=5,类型为带符号的ptrdiff_t(头文件cstddef)

5.2 数组的下标和指针

int *p=&a[2]; int j=p[1];//a[3] int k=p[-2];//a[0]

C语言中指针与数组的关系是怎样的?

6.

unsigned score[3]={4,2,3}; for (auto i : score) cout<<i<<" ";//4,2,3