C语言学习
程序员文章站
2022-07-15 09:04:41
...
1.指针
1.1指针数组
-
指针数组的一般形式
类型名 * 数组名 [数组长度] -
理解
比较倾向与在字符串数组中使用,节省空间
个人感觉使用起来和普通数组没什么区别, VC测试代码如下
#include<stdio.h>
int main(void)
{
int i;
char *P_array[3]={"pointer","test","hello word"};
int *P_int[3]={999,1111,3215};
for(i=0;i<3;i++)
printf("P_array[%d]指向的字符串:%s\n",i,P_array[i]);
printf("\n");
for(i=0;i<3;i++)
printf("指针数组P_array[%d]指向的地址:%x\n",i,&P_array[i]);
for(i=0;i<3;i++)
printf("指针数组P_array[%d]指向的地址:%x\n",i,P_array+i);
printf("\n");
for(i=0;i<3;i++)
printf("指针数组P_array[%d]指向的地址:%x\n",i,P_array[i]);
printf("\n");
for(i=0;i<3;i++)
printf("P_int[%d]指针指向的值:%d\n",i,P_int[i]);
printf("\n");
for(i=0;i<3;i++)
printf("指针数组P_s[%d]指向的地址:%x\n",i,&P_int[i]);
for(i=0;i<3;i++)
printf("指针数组P_s[%d]指向的地址:%x\n",i,P_int+i);
for(i=0;i<3;i++)
printf("指针数组P_s[%d]指向的地址:%x\n",i,P_int[i]);
return 0;
}
运行结果如下所示
P_array[0]指向的字符串:pointer
P_array[1]指向的字符串:test
P_array[2]指向的字符串:hello word
指针数组P_array[0]指向的地址:19ff20
指针数组P_array[1]指向的地址:19ff24
指针数组P_array[2]指向的地址:19ff28
指针数组P_array[0]指向的地址:19ff20
指针数组P_array[1]指向的地址:19ff24
指针数组P_array[2]指向的地址:19ff28
指针数组P_array[0]指向的地址:422060
指针数组P_array[1]指向的地址:422058
指针数组P_array[2]指向的地址:422070
P_int[0]指针指向的值:999
P_int[1]指针指向的值:1111
P_int[2]指针指向的值:3215
指针数组P_s[0]指向的地址:19ff14
指针数组P_s[1]指向的地址:19ff18
指针数组P_s[2]指向的地址:19ff1c
指针数组P_s[0]指向的地址:19ff14
指针数组P_s[1]指向的地址:19ff18
指针数组P_s[2]指向的地址:19ff1c
指针数组P_s[0]指向的地址:3e7
指针数组P_s[1]指向的地址:457
指针数组P_s[2]指向的地址:c8f
Press any key to continue
按程序执行结果来看跟普通的数组差不多,首先是int*数组,是个一维指针数组,所以&P_int[i] = P_int+i 从运行的结果来看都是P_int[i]的地址;而char *字符串数组本身就是一个二维数组,
&P_array[i] = P_array+i 是P_array[i]字符串的首地址值的存放地址,C语言中指针变量占四字节,这就和上边呼应上了
- 顺便复习一下堆栈概念
从打印出的两个数组的地址值来看很容易理解堆栈的概念:局部变更存放在栈,全局变量存放在堆内。
char a;
int i;
char *P_array[3]={"pointer","test","hello word"};
int *P_int[3]={999,1111,3215};
程序中定义的变量全为
上一篇: C#基础 ToString(x2) 十进制转换成十六进制 格式对齐
下一篇: C语言学习