C语言基础学习3:数组与指针

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

1、指向数组元素的指针

C语言规定数组名(不包括形参数组名,形参数组并不占据实际的内存单元)代表数组中的首元素(即序列为0的元素)的地址。

int a[10];
int *p1,*p2;
p1 = &a[0];
p2 = a;

p1和p2指向同一个数组a[10]。

2、通过指针引用数组元素

按C语言的规定,如果指针变量p已指向数组中的一个元素,则p+1指向同一个数组中的下一个元素,而不是将p的值(地址)简单的加1。

如果p的初值为&a[0],则

(1) p+i 和 a+i就是a[i]的地址。

(2) *(p+i) 或 *(a+i)是p+i 和 a+i 所指向的数组元素,即a[i]。

(3)指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价。

for(p=a;p<a+10;p++)
   printf("%d",*p);

(4)可以通过改变指针变量指向不同的元素。注意上面的p++不能改为a++,原因是数组a虽然也代表数组首元素的地址,但它是一个指针常量,它的值在程序运行期间是固定不变的。

(5)注意指针的指向。

#include <stdio.h>
void main()
{
    int *p,i,a[10];
    p = a;
    for(i=0;i<10;i++)
        scanf("%d",p++);
    printf("\n");
    p = a; //作用是将指针的位置重新定位到数组首地址处
    for(i=0;i<10;i++,p++)
    {
        printf("%d",*p);
        printf("\n");
    }
    return;
}

(6)注意指针变量的运算

i.p++或(p+=1).使p指向下一元素,即a[1]。若再执行*p,则得到下一个元素a[1]的值。

ii.*p++。由于++和*同优先级,结合方向为自右向左,因此它等价于*(p++)。作用是先得到p指向的变量即(*p),然后再使p+1.

for(i=0;i<10;i++)
    printf("%d",*p++);

与(3)等价。

iii.*(p++)与*(++p)作用不同。前者是先取*p值,然后使p加1.后者是先使p+1,然后再取*p。若p初值为a(即&a[0]),则*(p++)为a[0],*(++p)为a[1]。

iv.++(*p)表示p所指向的元素值加1,如果p=a,则++(*p)相当于++(a[0]),注意是元素a[0]加1,不是指针p加1。

v.如果p当前指向a数组中第i个元素,则

*(p--)相当于a[i--],先对p进行*运算,再使p自减。

*(++p)相当于a[++i],先使p自加,再作*运算。

*(--p)相当于a[--i],先使p自减,再作*运算。

3、用数组名作为函数参数

实参数组名代表一个固定的地址,或者是指针常量,但形参数组并不是一个固定的地址值,而是作为指针变量,并不是真正地开辟一个数组空间,在函数调用开始时,它的值等于实参数组首元素的地址,在函数执行期间,它可以再被赋值。实参和形参都可以使用数组名或指针变量。

4、多维数组与指针

C语言基础学习3:数组与指针

时间: 2024-10-13 00:21:11

C语言基础学习3:数组与指针的相关文章

C语言基础学习9:指向指针的指针

一般形式: 基类型 **变量名: 例如:char **p; void main() { char *name[] = {"Follow me","Basic","Great Wall","FORTRAN","Computer design"}; char **p; int i; for(i=0;i<5;i++) { p = name + i; printf("%s\n",*p);

C语言基础学习7:返回指针值的函数

一个函数可以返回一个整型值.字符值.实型值等,也可以返回指针型的数据,即地址,返回的是指针类型. 返回指针值的函数的一般定义形式为; 数据类型 *函数名(参数列表) 例如: int *a(int x, int y); a作为函数名,调用它之后能得到一个指向整型数据的指针(地址). ()优先级高于*,因此a先与()结合,这是函数形式,返回值为指针形式. 1 #include <stdio.h> 2 float *search(float (*pointer)[4]); 3 float *sear

C语言基础学习8:指针数组

一个数组,若其元素均为指针类型数据,称为指针数组,指针数组中的每一个元素都相当于一个指针变量. 一维指针数组的定义形式为: 类型名 *数组名[数组长度]: 例如:int *p[4]; []的优先级比*高,因此p先与[4]结合,形成p[4]形式,这是数组形式,然后再与p前面的"*"结合,"*"表示此数组是指针类型的,每个数组元素都可指向一个整型变量. 为什么要用到指针数组呢? 因为它比较适合于用来指向若干个字符串,使得字符串处理更加灵活. 1 #include <

C语言基础学习5:字符串与指针

1.字符串的表示形式 (1)用字符数组存放一个字符串,然后输出该字符串. char string[] = "I am happy"; printf("%s",string); (2)用字符指针指向一个字符串. char *string = "I am happy"; printf("%s",string); 2.字符指针作函数参数 (1)用字符数组作参数 void CopyString(char from[], char to

C语言基础学习6: 指向函数的指针

1.函数指针变量调用函数 1 #include <stdio.h> 2 int max(int x, int y); 3 int max(int x, int y) 4 { 5 int z; 6 if(x<y) 7 z = y; 8 else 9 z = x; 10 return z; 11 } 12 void main() 13 { 14 int a,b,c; 15 scanf("a=%d,b=%d",&a,&b); 16 c = max(a,b);

C语言基础学习3:指针

1.地址和指针的概念 一个变量的地址成为该变量的“指针”. 如果有一个变量专门用来存放另一变量的地址(即指针),则它称为“指针变量”,指针变量的值(即指针变量中存放的值)是地址(即指针). 指针是一个地址,而指针变量是存放地址的变量 2.变量的指针和指向变量的指针变量 2.1指针变量的定义 指针变量的定义:基类型 *指针变量名: int a; int *pointer; pointer = &a; 2.2指针变量的引用 指针变量中只能存放地址,不能将一个整数赋给一个指针变量. “&”和“*

C语言基础学习2:字符数组

在C语言的基本数据类型中没有没有字符串变量,一般以字符数组的形式给出. 1.字符串数组的初始化 char c[] = {'I', ' ', 'a', 'm', 'h', 'a', 'p', 'p', 'y'}; char c[] = "I am happy"; 区别:第一种方式字符串长度为10,内存中占10*sizeof(char)个字节,第二种方式是以字符串形式表示,有一个字符串结束字符'\0',内存中占11*sizeof(char)个字节. 2.字符数组的输入输出 %c,一个一个字

C语言学习_数组与指针2

数组其实是一种变相的指针,数组名同时也是指针,eg: CODE == &CODE[0]; 数组的加法: #include<stdio.h> #define SIZE 4 int main(void) { shortdates[SIZE]; short* pti; shortindex; doublebills[SIZE]; double* ptf; pti= dates;//把数组地址付给指针 ptf= bills; printf("%23s  %10s\n", &

C语言基础学习笔记

--C语言框架-- 数据  字节byte          字符   char         8  半字half word     短整型        short int    16    字word            整型   int(integer)   32               长整型   long int     32                 单精度   float        32   双字(double word) 双精度  double       64