指针常量,数组打印

来源:互联网 发布:通达oa精灵mac版 编辑:程序博客网 时间:2024/05/22 15:14
//把数组打印出来
# include <stdio.h>
void printfshuzu(char *p, int n);
int main()
{
char a[5] = {'h','e','l','l','o'};//a是一个指针常量。
    printfshuzu(a,5);
// printf("%d", &a[0]);
return 0;
}


void printfshuzu(char *p, int n)//实参和形参的数据类型要是一样的,
{
    char *i;
for(i = p; i < p+n; i++)
{
printf("a[%d] = %c\n", (i-p), *i);
}
}
////把数组打印出来
# include <stdio.h>
void printfshuzu(char *p, int n);
int main()
{
char a[5] = {'h','e','l','l','o'};
    printfshuzu(a,5);
// printf("%d", &a[0]);
return 0;
}


void printfshuzu(char *p, int n)
{
    char *i;
for(i = p; i < p+n; i++)
{
printf("a[%d] = %c\n", (i-p), *i);//对于这个部分的处理假如要是变成别的类型的变量呢?这里是因为char类型的变量只占有一个字节

}
//实参和形参的数据类型要是一样的,上面的传递的都是指针常量,数组名就是指针常量,也是地址,数组名就是地址


//下面将char 类型的变量转换成整型变量来试一下
# include <stdio.h>
void printfshuzu(int *, int);
int main()
{
int a[5] = {1, 2, 3, 4, 5};
printfshuzu(a,5);
return 0;
}


void printfshuzu(int *p, int n)
{
int *i;//i是指针,指针加1,字节数可以加好几个
for(i = p; i < p+n; i++)
{
printf("a[%d] = %d\n", (i-p), *i);//这里对p的理解很重要,p是一个指针,p+1是可以移动很多个字节的
(内存是可以看成是一个数组,(逻辑上是连续的,实际上是可以不连续的), 指针就相当于这个数组的下标)
}
}

//事实证明:这里与类型是没有关系的

使用另一种方法打印数组里面的内容



# include <stdio.h>
void printfdhuzu(char p[], int n);
int main()
{
char a[5] = {'h','e','l','l','o'};
printfshuzu(a,5);//a也是一个指针常量
return 0;
}


void printfshuzu(char p[], int n)//这里是一个指针常量啊
{
char *i;
for(i =p; i < p+n; i++ )
{
printf("a[%d] = %d\n", (i-p), *i);
}

/*

  void printfshuzu(char p[], int n)

{

  int i;

 for(i = 0; i  < i+n; i++)

{

printf("a[%d] = %d\n", i,p[i]);
}
}

*/

}

//通过上面的例子我们要知道的是:

函数的传递的参数的类型要是一样的,所以最后一个例子还是能够成立的

数组名是一个地址,而这个地址不会变,那么就是一个地址常量,指针就是地址,地址就是指针,那么数组名也就是地址常量,所以又有数组名与指针密不可分。

上面我们用到了变量++,指针++


0 0