您的位置:首页 > 编程语言 > C语言/C++

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

2013-09-25 07:20 423 查看
数组与指针:

数组元素的指针就是数组元素的地址

指向数组元素的指针,它的方法与指向变量的指针变量相同

引用一个数组元素可以用:

(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. 指针变量的值是可以改变的;

另外,如定义一个指针变量,并使用它指向一个字符串,就可以用下标形式,引用指针变量所指的字符串中的字符.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: