数组名是指针常量还是常量指针(fork函数的作用)
- 前端设计
- 2023-08-13
- 82
大家好,关于数组名是指针常量还是常量指针很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于fork函数的作用的知识点,相信应该可以解决大家的一些困惑和问题...
大家好,关于数组名是指针常量还是常量指针很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于fork函数的作用的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
二维数组的数组名是常量还是变量
二维数组的数组名应该是地址常量。
二维数组名为什么不能直接赋值给二级指针
——为何可以int(*p)[n]=&a[i],而不能p=a[i]赋值(0<=i<m)?
p是什么?p首先是一个指针,存放了一个包含n个整型数据的数组(姑且叫他数组甲)的地址,这个时候我们可以认为数组甲,是一个有很多个类似于数组甲这样的元素构成的数组(我叫他数组乙,很显然,乙是个二维数组,数组的数组)的首元素,数组甲的地址就是数组乙的首元素的地址,所以p就可以当作数组乙的名字来赋值(二维数组名,也就是a)。
现在a是二维数组,先把a降维,看成是有m个元素组成的一维数组。那么a[0]是什么?是a这个现在被我暂时看成一维的数组的首元素。对首元素取地址,就是数组名。所以a==&a[0]。以此类推,a+i==&a[i]。那么a[0][0]又是什么?是对a取星以后的a[0]的首元素,也就是数组名,所以a[0]==&a[0][0],所以**a==a[0][0]==
*(*
(a+i)+j),只不过这里ij都是0。所以,p这么一个指向数组的指针,可以赋给它a[0]的地址(a的首元素地址,也就是a),p=a=&a[0],以此类推,p+i=&a[i]。所以你的p=a[i]不对,a[i]是降维之后a的第i个元素同时又是个一维数组名,表示a[i][0]地址,只能赋给一个指向整型数据的指针。而你的p是个指向数组的指针,赋值符号左右端类型不同,这上哪能赋值?
你后面这p=&a[i]语法上是不错,但是是强制让p指针下移i个位置了,因为p+i=&a[i](假设你已经赋值p=&a[0]),你这个不就相当于p=p+i,也就相当于p+=i。也不是个特别好的写法。
另外,如果你再定义一个int*q;然后q=a。这是可以的,a可以降维也可以不降维直接用。这时q=&a[0][0]
——在一维数组中却只能用p=a,而不能用p=&a.
在一位数组里面,你就得这样定义:int*p;这样p里面存的是一个整型变量的“坑”的坑号。而一维数组a数组名不就是他自己首元素的坑的坑号?当然可以赋值p=a。
p=&a表示的是什么?a本来就是一个地址,你还要再对a取地址,应该还是它本身,但是含义不同。
非形参数组名都是指针常量,对指针常量取地址还是它本身(或者压根取不了地址,因为常量可能没地址)。
你也可以在编译器里面打一下看看会不会报错。数组的表示法
数组元素地址可以是数组名,或者数组名加上常数,或者数组元素取地址。比如aa+i&a[i]这三种形式都是元素地址。元素本身,可以对元素地址取值,也可以用下标方式。比如a[i]或者*(a+i)
数组是一组什么数据的集合,其中的每个元素称为什么
C语言数组中:构成数组各个元素具有相同的数据类型。在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。以C语言中的一维数组为例,一维数组的定义方式为:类型说明符数组名[常量表达式];其中,类型说明符是任一种基本数据类型或构造数据类型。数组的类型实际上是指数组元素的取值类型。其实,从变量的角度看,每个数组元素(相当于变量)具有的属性:数组元素名、数据类型、值、内存地址中,能每个元素都相同的也只能是数据类型。
c语言数组名值可变吗
c99以前的版本是没有的,数组大小必须是常量或者是常量表达式,c99版本才加入变长数组
c语言指针可以指向枚举类型吗
C语言指针用法灵活,基本类型指针,
通用指针void*
指针数组和数组指针
函数指针和指针函数
结构指针和联合指针
枚举指针
指针常量和常量指针
指针的指针
基本类型指针
指向整型和浮点型的指针。包括char,int,float,double类型指针
通用指针
void*声明一个通用指针,该指针可以和除函数指针类型之外指针类型相互转换。
例如:
void*p;
int*ip;
p=ip;
ip=p;
指针数组和数组指针
指针数组:指针数组的每个元素都是指针类型。
例如:
//ip是数组类型,数组中每个元素是int型指针。
int*ip[];
//fp是数组类型,数组中每个元素是float型指针。
float*fp[];
数组指针:指针类型,指向数组。
例如:
inta[100];//声明和定义数组a
int*pa=a;//声明指针pa,并且将数组a的首地址赋值给pa
inta1=*(pa+1);//获取数组a第2个元素的值,即a[1]的值
注:数组名本身就是当做地址常量赋值给指针,不需要&地址运算符。
函数指针和指针函数
函数指针指向特定函数类型的指针。
例如:
//fp是指针,指向返回值为int型,有1个int型参数的一类函数
int(fp)(int);//fp是指针,指向返回值为double型,有2个double型参数的一类函数double(fp)(double,double);
//fp是指针,指向返回值为int型指针,有1个int型参数的一类函数
int(fp)(int);
注:指针函数是指返回值为指针类型的函数,本质上是函数类型;函数指针是指向函数类型的指针,本质上指针类型。
结构指针和联合指针
指向结构类型、联合类型的指针。
例如:
struct
枚举指针
指向枚举类型的指针。
例如:
enum
指针常量和常量指针
指针常量:指向常量的指针,指针本身是变量。
例如:
constintp=1;//定义常量p
constint*ptr=&p;//ptr是指针,指向constint*常量int型
inti=2;
p=i;//此时出错,不能给常量赋值
ptr=&i;//正确,ptr是指针变量,可以赋值
常量指针:指向变量的指针,指针本身是常量。
例如:
intp=1;//定义变量p
intconstptr=&p;//ptr是指针常量,指向变量int型
inti=2;
p=i;//正确,p是变量
ptr=&i;//错误,ptr是常量指针
指针的指针
C语言支持多重指针,即指向指针的指针。
例如:以下都可以输出变量i的值。
#include
输出结果:
10
文章分享结束,数组名是指针常量还是常量指针和fork函数的作用的答案你都知道了吗?欢迎再次光临本站哦!
本文链接:http://xinin56.com/qianduan/5405.html