指针的基本声明:
void test() { char a; // a = 10; 直接引用 // 定义了一个指针变量b,而且b只能指向char类型的变量 char *b; // 让指针变量b指向a b = &a; // 这里的*b代表:访问b值对应的存储空间(也就是变量a的存储空间) // 相当于a = 10; *b = 10; printf("%d ", a); a = 11; // 这里的*b相当于取出变量a存储的值 printf("%d ", *b); } void test1() { char a = 10; char *b = &a; /* 相当于下面两句 char *b; b = &a; */ } void test2() { // 这是错误的做法 char *p; // 应该在指针确定指向的变量后,再进行相应的操作 *p = 10; } void test3() { // 这个错发也是错误的 char *p; // 指针变量是用来存储变量地址的,不能随便赋值一个常数,除非你这个常熟恰好是某个变量的地址 p = 100; } int main(int argc, const char * argv[]) { return 0; }
指针-数组-函数参数:
#include <stdio.h> // 这个函数用来修改数组的第一个元素 void change(char c[]) { c[0] = 1; } void change2(char *c) { // *(c+2) = 10; 修改a[2]的值 c[2] = 10; } int main(int argc, const char * argv[]) { char a[3]; //char *p = a; change2(a); printf("a[2]=%d", a[2]); return 0; }
指针例子:计算 差 and 和
int sumAndMinus(int v1, int v2, int *p) { *p = v1 - v2; return v1 + v2; } int main(int argc, const char * argv[]) { int a = 10; int b = 4; // 接收a跟b的和 int sum; // 接收a跟b的差 int minus; sum = sumAndMinus(a, b, &minus); printf("sum=%d, mimus=%d", sum, minus); return 0; }
指针与一维数组:
void test() { int a[2]; int *p; // p = &a[0]; p = a; *p = 10; printf("%d", a[0]); } void test1() { int a[3] = {1, 2, 3}; for (int i = 0; i<3; i++) { printf("a[%d]=%d ", i, a[i]); } } void test2() { char a[3] = {1, 2, 3}; // 让指针指向第一个元素 char *p = a; for (int i = 0; i<3; i++) { printf("a[%d]=%d ", i, *(p+i)); } } void test3() { int a[3] = {1, 2, 3}; // 让指针指向第一个元素 int *p = a; // p == ffc1 // p + 1 == ffc3 // p + 2 == ffc5 // 遍历完数组后,p的值并没有变过 for (int i = 0; i<3; i++) { printf("a[%d]=%d ", i, *(p+i)); } } void test4() { int a[3] = {1, 2, 3}; // 让指针指向第一个元素 int *p = a; // 在遍历数组的过程中,指针的值一直在改变 for (int i = 0; i<3; i++) { printf("a[%d]=%d ", i, *(p++)); } } void test5() { int a[3] = {1, 2, 3}; // a == ffc1; // a + 1 == ffc3 // a + 2 == ffc5 // 不能够写成a++,因为a是个常量 for (int i = 0; i<3; i++) { printf("a[%d]=%d ", i, *(a + i)); } } void test6() { int a[3] = {1, 2, 3}; // 让指针指向第一个元素 int *p = a; // p == a == ffc1 // p++ == a + 1 == ffc3 // p++ == a + 2 == ffc5 // 在遍历数组的过程中,指针的值一直在改变 for (int i = 0; p < a + 3; i++, p++) { printf("a[%d]=%d ", i, *p); } } int main(int argc, const char * argv[]) { test6(); return 0; }
指针与字符串:
void test() { char s[7] = "itcast"; for (int i = 0; s[i] != '