指针基本概念
(1)指针就是地址,指针变量存放地址
(2)通过变量名直接存取值为直接访问,通过该地址获得值为间接访问
(3)怎么样定义指针变量
int *p1,*p2;
(4)给指针变量赋值
int a;
int *p;
p = &a;//将a的地址赋值给变量p
(5)怎么样引用指针变量
带类型语句,称为定义语句
指针变量定义语句以外的语句:
##不带*号表示地址
##带*号,表示对应地址的值
(6)指针变量作为函数参数
传址与传值的区别
#include <stdio.h> void f(int *p,int n){ *p = 1998;//传址:被调用函数中改变地址中的值,也改变实参的值 n = 99;//传值:被调用函数中改变形参的值,不影响实参的值 } int main() { int a = 10,b=20; f(&a,b); printf("%d %d ",a,b); return 0; }
指针与数组
数组名也是指针,是第一个元素的地址
#include <stdio.h> int main() { int a[5]={5,6,4,3,9}; printf("第一个元素的地址%d ",a); printf("第一个元素的地址%d ",&a[0]); printf("第二个元素的地址%d ",a+1); printf("第二个元素的地址%d ",&a[1]); return 0; }
通过指针引用数组
#include <stdio.h> int main() { int a[4]={1,2,3,4}; int *p; p = a; printf("%d ",a[1]); printf("%d ",*(p+1)); printf("%d ",*(a+1)); return 0; }
用指针写的插入排序
void sort(int *a,int n){ int i,j; for(i=1;i<n;i++){ if(*(a+i)<*(a+i-1)){ int temp = *(a+i); for(j=i-1;j>=0&&temp<*(a+j);j--){ *(a+j+1) = *(a+j); } *(a+j+1) = temp; } } }
指针与字符串
#include <stdio.h> int main() { char *String;//char* String="I love you baby"; String="I love you baby";//字符指针变量存放的字符串第一个字符的地址 printf("%s ",String); return 0; }
但是字符数组不可以这样用.
二维数组和指针
#include <stdio.h> int main() { int a[2][3]={{1,2,3},{4,5,6}}; int i,j; int *p;p = a; for(i=0;i<2;i++){ for(j=0;j<3;j++){ printf("%d ",*(p+i*3+j)); } printf(" "); } printf("%d ",p[4]); return 0; }