C语言中关于数组与指针和字符串与指针的小结

数组与指针:
数组元素的指针就是数组元素的地址
指向数组元素的指针,它的方法与指向变量的指针变量相同
引用一个数组元素可以用:
(1)下标法  如:a[i]形式;
(2)指针法  如:*(a+i)或*(p+i);
a是数组名,p是指向数组元素的指针变量,它的初值p=a
注意:
  数组名即翻译成数组的第一个元素的地址,其中a或p是第一个元素的地址,加上i就是指向第i个元素。注意,它不是地址加上i,具体要看是什么类型的。
例题:
     输出数组中的全部的元素的方法
(1)    下标法(就是简单地数组的定义,初始化,赋值及应用)
(2)    通过数组名计算数组的元素的地址,找到元素的值
Int I,a[10];
For(i=0;i<10;i++){
Scanf(“%d”,&a[i]);
}
For(i=0;i<10;i++){
Printf(“%d”,*(a+i));
}
(3)    用指针变量指向数组
Int I,a[10],*p;
For(i=0;i<10;i++){
Scanf(“%d”,&a[i]);
}
For(p=a;i<(a+10);p++){
Printf(“%d”,*p);
}
用数组名做函数参数:
C语言调用函数时,虚实结合的方法都是采用“值传递”方式,当用变量名做函数时,传递的是变量的值,当采用数组名作为函数参数时,
由于数组名代表的是数组元素首地址,因此传递的值是地址,所以要求形参为指针变量。
小结:
     如果有一个实参数组,想在函数中改变此数组中元素的值,实参与形参的对应关系有以下4中情况:
(1)    形参和实参都用数组名,如:
Int a[10];
F(a,10);
Void f(int x[],int n){}
(2)    实参用数组名,形参用指针变量,如:
Int a[10];
F(a,10);
Void f(int *a,int n){}

(3)    实参形参都用指针变量,如:
Int a[10],*p=a;
F(p,10);
Void f(int *x,int n){}

(4)    实参为指针变量,形参为数组名,如:
Int a[10],*p=a;
F(p,10);
Void f(int x[],int n){}
字符串与指针
字符串中字符的存取可以用下标法,也可以用指针方法
虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但他们还是有区别的:
1.    字符数组有若干个数组元素组成,每个元素中存放一个字符,而字符指针变量中存放的是地址即字符串第一个字符的地址,绝不是将字符串放到字符指针变量中;
2.    赋值方式.字符数组只能对各个元素赋值;
3.    对字符指针变量赋初值;
4.    如果定义一个字符数组,在编译时为他分配内存单元,它有确定的地址.而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址,也就是说,该指针变量可以指向一个字符数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据;
如:
    char str[10];
    scanf("%s",str);
这样编写是完全可以的。经常有人用这样的方法
如:
    char *a;
    scanf("%s",a);
它的目的是想输入一个字符串,一般也能运行,但这种方法是危险的,因为指针变量没有赋初值时,它是随机指向的。
5.    指针变量的值是可以改变的;
另外,如定义一个指针变量,并使用它指向一个字符串,就可以用下标形式,引用指针变量所指的字符串中的字符.
                                                                                                                                    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值