// 二维数组指针定义.初始化
//
// 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[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
//定义一个二维数组指针
int (*p)[4]=a;
//使用二维数组指针遍历
for(int i = 0;i<3;i++){
for(int j = 0;j<4;j++){
printf("%d\t",*(*(a+i)+j));
}
printf("\n");
}
printf("Hello, World!\n");
return 0;
}
// 用数组名访问二维数组
//
// Created by 李佳乐 on 15-3-17.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
// ******************* a[i]+j 代表的是a[i][j]的坐标
// ******************* *(a[i]+j) 代表的是a[i][j]的值
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 定义一个二维数组
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
printf("a=%p,a[0]=%p,&a[0][0]=%p\n",a,a[0],&a[0][0]);//地址相同
//*(*(a+i)+j) 代表a[i][j]的值
printf("a[0]+1=%p == &a[0][1] = %p ----> %d\n",a[0]+1,&a[0][1],a[0][1]);
printf("a[0]+2=%p == &a[0][2] = %p ----> %d\n",a[0]+2,&a[0][2],*(a[0]+2));
printf("a[0]+3=%p == &a[0][3] = %p ----> %d\n",a[0]+3,&a[0][3],*(a[0]+3));
for(int i = 0;i < 3;i++){
for(int j = 0;j < 4;j++){
printf("a[%d][%d] = %d \n",i,j,*(*(a+i)+j));
}
}
printf("Hello, World!\n");
return 0;
}
// 字符串指针
//
// Created by 李佳乐 on 15-3-19.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
/*
字符串指针
定义: char *字符串指针变量名="字符串"内容;
用来保存一个字符串
常量区 就是存储一个已经被缓存的常量
经常使用 常量区不可以对常量进行修改
在常量区保存的数据都只读的
*/
/*
#include <stdio.h>
int main(int argc, const char * argv[]) {
// "asdgfsadfgsdfg" 这个字符串存储在常量区
//str 只保存了字符串常量的首地址
char *str="asd";
//指针变量都是占用8个字节
printf("%ld\n",sizeof(str));
printf("%s\n",str);
//str是指针变量
//str重新指向另外一个字符串常量 "i love you"
//保存的是"i love you"字符串常量的首地址
str = "i love you";
printf("%s\n",str);
char ch[]="abc"; //字符串数组存在栈区,可以进行修改
ch[2]='z';
printf("%s\n",ch);
//读取字符串常量的某个字符
for(int i =0;i<10;i++){
printf("%c\t",*(str+i));
}
return 0;
}
*/
//字符串指针 指向的时一个字符串的首地址
#include <stdio.h>
int main(){
//定义一个字符串指针
char *str="abc";
//str是变量,所以可以改变指向,而字符串是常量,所以不可以重新修改
str = "hello";
// //变量字符串的元素
// for(int i = 0;i < 5;i++){
// printf("%c\n",*(str+i));
// }
printf("%s\n",str);
return 0;
}
// 指针函数
//
// Created by 李佳乐 on 15-3-19.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
//指针函数返回值为一个地址(它是一个函数,返回值为地址)
//#include <stdio.h>
//定义一个函数,传递两个整数,返回大数的地址
/*
int * max(int *pa,int *pb){
return *pa > *pb ? pa : pb;
}
int main(int argc, const char * argv[]) {
// 定义两个变量
int a = 10,b = 5;
printf("a = %p\nb = %p\n",&a,&b);
int *p = max(&a,&b);
printf("%p\n",p);
return 0;
}
*/
#include <stdio.h>
//定义一个指针函数
int * max(int *pa,int *pb){
return *pa>*pb? pa : pb;
}
int main(){
//定义两个变量
int a=10,b=5;
printf("a = %p\nb = %p\n",&a,&b);
//定义指针的同时初始化
int *p = max(&a, &b);
printf("p = %p\n",p);
return 0;
}
// 函数指针
//
// Created by 李佳乐 on 15-3-19.
// Copyright (c) 2015年 gongsimingzi. All rights reserved.
//
/*
函数指针的定义格式
被指向的函数的返回值类型 (*函数指针变量名)(被指的函数的参数)
*/
/*
#include <stdio.h>
int max(int x,int y){
return x > y? x : y;
}
int sum(int x,int y){
return x+y;
}
int main(int argc, const char * argv[]) {
// 定义了一个函数指针,指针变量名是pmax,它只能指向返回值是int 并且有两个int类型参数的函数
// int (*pmax)(int x,int y);
//得到了指向函数的返回值
int (*p)(int x,int y);
int a = 5;
if(a >5){
p = max;
}else{
p = sum;
}
//函数指针的使用
int m = (*p)(438,78);//int m = p(438,78);
printf("%d\n",m);
return 0;
}
*/
//函数指针 定义一个函数指针 指向的是函数的首地址,得到函数的返回值
#include <stdio.h>
//定义一个函数
int sum(int x,int y){
return x+y;
}
int cheng(int x,int y){
return x * y;
}
int main(){
//定义一个函数指针
int (*p)(int x,int y);
//给函数指针初始化
p = sum;
//调用
int m = (*p)(10,5);
printf("%d\n",m);
return 0;
}