数组指针
指向数组的指针
如:
int t1[5] = {1,2,3,4,5};
char t2[5] = {'1','2','3','4','5'}
int (*p1)[5] = &temp;
char (*p1)[5] = &temp; // 字符数组指针特别,可直接写char (*p1)[5] = temp; 但会有提示#include<stdio.h>
int main()
{
int temp[5] = {1,2,3,4,5};
int (*p2)[5] = &temp; // 数组指针 指向temp (p2存放着数组temp的地址)
int i;
for(i = 0; i < 5; i++)
{
printf("%d\n",*(*p2 + i)); // *p2 1层解引用获取数组第0个元素的地址,
// *(*p) 2层解引用取值。
// (*p+1) 地址加1
// *(*p+1) 取值
}
}
#include<stdio.h>
int main()
{
char temp[5] = {1,2,3,4,5};
char (*p2)[5] = temp; // 数组指针 指向temp (p2存放着数组temp的地址)
int i;
for(i = 0; i < 5; i++)
{
printf("%d\n",*(*p2 + i)); // *p2 1层解引用获取数组第0个元素的地址,
// *(*p) 2层解引用取值。
// (*p+1) 地址加1
// *(*p+1) 取值
}
}
指针数组
数组里面存放着指针变量#include<stdio.h>
#include<stdlib.h>
int main()
{
char *temp[5] = {NULL};
char *tmp; // 声明个临时指针
int i;
// 初始化 指针数组 (存入个数据的地址,这里为了直观,用malloc来申主请内存)
for(i = 0; i < 5; i++)
{
tmp = (char *)malloc(sizeof(char)); // 申请内存
*tmp = i; // 赋值
temp[i] = tmp; // 地址存入 指针数组
}
// 指针数组 直接打印当然打印的是地址
for(i = 0; i < 5; i++)
{
printf("%d ", temp[i]);
}
printf("\n");
// 指针数组 解引用后才是真正的值
for(i = 0; i < 5; i++)
{
printf("%d ", *temp[i]);
}
printf("\n");
}
|