c语言指针和数组代码,C语言指针和数组(示例代码)

本文详细介绍了C语言中的指针和数组的概念及操作,包括指针的取值和地址运算,数组与指针的关系,地址算术运算,以及指针数组和指向指针的指针的差异。此外,还讨论了字符串常量、多维数组的使用以及在函数参数传递中的应用。同时提到了命令行参数的处理,展示了指针在实际编程中的重要性和灵活性。
摘要由CSDN通过智能技术生成

C语言指针和数组

binsearch else-if shellsort insertsort

指针和地址

指针是编程语言中的一类数据类型及其对象或变量,用来表示或存储一个内存地址,这个地址的值直接指向(points to)存在该地址的对象的值。

取值运算*p返回保存在内存地址为p的内存空间中的值。取地址&p运算则返回操作数p的内存地址

C语言是以传值的方式将参数值传递给被调用函数,被调用函数不能直接修改主调函数中的值,需要修改主调函数中的值就需要利用指针

指针和数组

数组名代表的是该数组的第一个元素的地址,对于a[i]的引用可以写成*(a+i)或者*(pin + i)或者pin[i],通过数组名和下标实现的表达式可等价通过指针和偏移量实现

int a[10];

int *pin;

pin = &a[0];

pin = a;

pin = pin + 1;

pin = &a[1];

pin = a + 1;

不同的是数组名和指针之间,数组名代表的是一个常量,相反指针代表的是一个变量,因此pin = a和pin++是合法的,而a = pa和a++是错误的

地址算术运算

指针可以进行比较运算:指向同一个数组的指针可以进行== <= >= !=等

同样指针可以进行与整数相加或相减运算,如p+n其中n的长度不是固定的,会随着指针等比例的缩放,减法也是相同的

指向同个数组的两个指针可以相减或者比较运算如p-q+1代表两指针之间的元素个数

指针不可进行上述以外的其他运算,如两指针之间的相加运算、乘除运算等,同double或者float之间的加减运算,以及强制转换运算

字符指针和函数

字符串常量就是一个字符数组:"I am a string",在内部表示中字符和\0组成

char amessage[] = "now is the time"; //定义一个数组

char *message = "now is the time"; //定义一个指针

对于第一种情况,定义了一个数组,其中amessage指向这个字符数组的第一个字符,固定不变,数组中的单个字符可以进行修改。而对于第二种情况,message指向一个字符串常量,只是将一个指向该字符串常量的指针赋值给了message,并没有进行字符串的复制,只是涉及到指针的操作,C语言没有提供处理整个字符串的运算符。

指针数组以及指向指针的指针

指针数组和数组指针的区别,指针数组就是一个数组,而这个数组的每一个元素都是一个指针;数组指针是一个指针,而这个指针指向一个数组

int a[10];

int *p[10];

int (*p)[10] = &a; //数组指针的使用

58c10d98fc8da64729d5d8fb8ed3e4df.png

enter description here

a和&a的区别,对于a数组名的值就是一个指针常量,也就是指向数组的第一个元素(代表第一个元素的地址),&a指向的是整个数组,然而&a和a的值相同,不同的是&a+1和a+1代表的含义不同,&a+1增加了整个数组的长度,a+1增加了一个元素的长度(a[1])

多维数组

daytab[i][j]表示一个二维数组,如果要将一个二维数组作为一个参数传递给函数,那么必须在函数声明中指明数组的列数(与数组的行数没有多大的关系)。怎么解释啦?向函数传递的是一个指针,这时就是传递的就是一个具有j个元素的行向量,也就是前面所说的数组指针

可以从上面的多维数组可以得出:数组指针的每一行的长度相同。这也是和指针数组不同的地方,指针数组的每个指针指向的长度可以不一样

char *name[] = {

"illegal month", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"

}

上面定义的就是一个指针数组的初始化,每个元素的长度都不一样,name[0](或者name)指向的就是第一个元素

命令行参数

在支持C语言的环境中,可以在程序开始时将命令行参数传递给程序。调用主函数main时,它带有两个参数,第一个参数(习惯为argc,用于参数计数)表示命令行中参数的数目,第二个参数(习惯为argv,用于参数向量)是一个指向字符串数组的指针,其中每个字符串对应一个参数

int main(int argc, char *argv[])

argv[0]表示函数名,因此argc的值至少为1,第一个可选参数为argv[1],最后一个可选参数为argv[argc - 1]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值