------Java培训、Android培训、iOS培训、.Net培训、期待与您交
//******************** 数组指针的概念 ********************
//数组只能: 指向数组元素的指针
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 定义一个变量
int num = 10;
//定义一个指针变量,指向的是一个整形变量
int *p = #
//定义一个数组
int a[]={1,2,3,4,5};
//这是数组指针
int *p1=&a[1];
int *p2=a;
printf("%d\n",*p1);
return 0;
}
//******************** 一维指针数组 ********************
#include <stdio.h>
int main(int argc, const char * argv[]) {
//定义整型数组
int a[10] = {1,3,4,5,6,7,8,9,10};
//定义指针数组
int *parr[4] = {&a[1],&a[3],&a[5],&a[8]};
//下标
// &parr[i]为 整型数组元素的地址
//parr[i] 为 存放整型数组元素地址的地址
for(int i = 0;i < 4;i++){
printf("&parr[%d] = %p,parr[%d] = %p\n",i,&parr[i],i,parr[i]);
}
//运行一下看打印出得结果,都是一样的
printf("%d\n",*parr[0]);
printf("%d\n", *(*parr + 0));
printf("%d\n", **parr);
printf("%d\n", *(parr[3]));
printf("%d\n",*(*(parr+3)));
return 0;
}
// ********** 使用指针引用数组元素
//
// Created by 李佳乐 on 15-3-17.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 定义数组
int a[5]={1,2,3,4,5};
for(int i = 0;i < 5;i++){
printf("&a[%d]=%p,a[%d]=%d\n",i,&a[i],i,a[i]);
}
//********** 定义一个数组指针(指向数组元素的指针)
int *p = a; //a = a[0]
// p的地址是a[0]
printf("p + 1 = %p\n",p +1); // p + 1 == &a[1] == &a[0 + 1]
printf("p + 1 = %d\n",*(p+1));//a[0 + 1]
//********** 用数组指针的方式打印出数组元素的地址和值
for(int i = 0;i < 5;i++){
printf("p + %d =%p, *(p + %d) = %d\n",i,p+i,i,*(p+i)); // a = p 他俩的地址相同
}
//********** 用指针偏移,来访问数组中所有的元素
for(int i = 0;i < 5;i++){
printf("*(p++) = %d\n",*(p++));
}
printf("Hello, World!\n");
return 0;
}
//
// main.c
// 用指针将数组逆序存放
//
// Created by 李佳乐 on 15-3-17.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
/*
#include <stdio.h>
void niXuArray(int arr[],int len){
//定义数组元素的下标
int i = 0,j = len -1;
//定义指针变量
int *p = arr;
//定义临时变量
int temp;
//循环
while(i<j){
//*(arr+i) = *(p + i)
//最前边的元素的值与最后边的元素的值交换
temp = *(p+i);
*(p+i) = *(p+j);
*(p+j) = temp;
i++,j--;
}
}
int main(int argc, const char * argv[]) {
//定义函数(参数:传递数组名,数组长度)
//定义变量
//循环
//交换
//定义数组
int num[10]={1,2,3,4,5,6,7,8,9,10};
//调用前打印的数组内容
for(int i = 0;i < 10;i++){
printf("%d",num[i]);
}
printf("\n-------------------------\n");
//调用函数
niXuArray(num,10);
//调用后打印的函数数组
for(int i= 0;i < 10;i++){
printf("%d",num[i]);
}
return 0;
}
*/
//使用指针逆序存放
#include <stdio.h>
//定义一个函数
void niXu(arr[],len){
//定义变量
int i = 0,j = len - 1;
//定义指针变量指向数组的首地址
int *p = arr;
//循环 如果第一项大于最后一项 交换
while(i < j){
int temp;
temp = *(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
i++,j--;
}
}
int main(){
//定义一个数组
int num[]= {1,2,3,4,5,6};
//调用函数
niXu(num, 6);
for(int i = 0;i<6;i++){
printf("%d\t",num[i]);
}
return 0;
}
// 使用一级指针也可以遍历二维数组
//
// Created by 李佳乐 on 15-3-17.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
/*
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 定义一个二维数组
int a[2][3]= {{1,2,3},{4,5,6}};
int *p =a;
//二维数组在内存中是线性存储的
for(int i = 0;i < 6;i++){
printf("%d ",*(p + i));
}
printf("Hello, World!\n");
return 0;
}
*/
#include <stdio.h>
int main(){
//定义一个二维字符串
char arr[2][3]={"abc","def"};
char *p = arr;
printf("%s\n",p);
return 0;
}