#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include <stdlib.h>
#include <windows.h>
//指针的定义,指针的运算
int main(){
int a = 10;
int *p;
p = &a;
*p = *p + 10;
printf("p:%d,a:%d\n", *p, a);//20 20
int y = 1 + *p;
printf("y:%d\n", y);//21
*p += 1;
printf("p:%d,a:%d\n", *p, a);//21 21
(*p)++;//先去指针p指向的值,再将该值自增1
printf("P:%d,a:%d,p address:%#x\n", *p, a, p);//22,22
*p++;//先取指针p指向的值,再将指针p自增1;
printf("P:%d,a:%d,p address:%#x\n", *p, a, p);
*(p++);//先将指针p自增1,再取指针p指向的值
printf("P:%d,a:%d,p address:%#x\n", *p, a, p);
system("pause");
return 0;
}
//数组与指针
int main(){
//数组名,就是数组的首地址
int a[5] = { 1, 2, 3, 4, 5 };
int * p;
p = a;//p赋值a数组的首地址
int i;
printf("%#x\n", a);
// a+5 ,表示a 移动到数组的第5个位置
for (i = 0; p < a + 5; p++){
*p = i;
i++;
}
//a数组值 {0,1,2,3,4}
p = p + 1;
p++;
printf("p:%d\n", *p);
return 0;
}
//指针变量名
//指针变量都是用于存地址的,而地址都是用4个字节的数字表示的。所以,指针变量都是占用4个字节
int main(){
int a = 10;
int *p = &a;
printf("p address:%#x\n",p);//0x22f738
p++;
printf("p address:%#x\n", p);//0x22f73c
//p是一个指针变量名
//*p 是从p指针变量里面取出一个int 型数据
char *cp = "hello dongnao";
printf("cp address: %#x\n", cp);//0x11e5860
cp++;
printf("cp address: %#x\n", cp);//0x11e5861
printf("sizeof p = %d, sizof cp = %d", sizeof(p), sizeof(cp));//4 4
system("pause");
return 0;
}
//指针和函数参数
void swap(int d, int e){
printf("d address: %#x, e address: %#x \n", &d, &e);
int temp;
temp = d;
d = e;
e = temp;
}
// 形参的修改不能带来这个实产的修改
// 将a b 的地址copy 给了 形参,然后,将这个份copy 的地址进行了切换,而地址所指的值是没有变的
void swap2(int *a, int *b) {
printf("swap2 a address: %#x, b address: %#x \n", a, b);// 0x36f72c 0x36f720
int *temp;
temp = a; // a address 给了temp
a = b; // a 的地址变成了b的地址
b = temp; //b 的地址变成了a 的地址
printf("swap2 a address: %#x, b address: %#x \n", a, b);// 0x36f720 0x36f72c
}
void swap3(int *a, int *b) {
int temp;
temp = *a;
*a = *b; // *a 代表是a所指的地址上面的值
*b = temp; // 将 b 所在地址的值变成了temp
}
int main(){
int a, b;
a = 10;
b = 5;
printf("a address:%#x,b address:%#x \n", &a, &b);//a address:0x50fb98,b address:0x50fb8c
swap(a, b);//0x36f648 0x36f64c
printf("a = %d, b = %d\n", a, b);//10 5
swap2(&a, &b);// 0x36f72c 0x36f720 0x36f720 0x36f72c
printf("a = %d, b = %d\n", a, b);//10 5
swap3(&a, &b);
printf("a = %d, b = %d\n", a, b);//5 10
system("pause");
return 0;
}
//指针数组,数组指针
void sort(char *name[], int n);//如果函数放在mian后面必须先声明
int main(){
char *name[] = { "hello", "dongNao", "Alvin", "world" };
int i, n = 4;
sort(name, n);
for (i = 0; i < n; i++){
printf("%s\n", name[i]);
}
//Alvin dongNao hello world
//数组指针
// p2 指向的是?指向的是一个数组,一个有5个元素的数组
char(*p2)[5];
//p2 是一个指针变量名
system("pause");
return 0;
}
//参数,是char 类型的指针数组
//name[i]是一个指针
void sort(char * name[], int n){
char *temp;
int i, j;
for (i = 0; i < n; i++){
for (j = 0; j < n - 1 - i; j++){
if (strcmp(name[j], name[j + 1])>0){
temp = name[j];
name[j] = name[j + 1];
name[j + 1] = temp;
}
}
}
}
//二级指针
// 二级指针,存的内容是一个一级指针的地址
// p 的值就是 p 这个变量,这个变量保存的是p 的地址
// *p 运算,得到的就是a 的值
// *p2 运算,得到的就是p的值
//**p2 运算,得到的就是 p的值的 *运算得到的值 a;
int main(){
int a = 100;
int *p;
p = &a;
int **p2;
p2 = &p;
return 0;
}
本文深入探讨了C语言中指针的基本概念与操作方法,包括指针的定义、运算及与数组的关系。通过实例演示了如何使用指针进行变量间的交换、数组元素的访问以及指针作为函数参数的应用。
1619

被折叠的 条评论
为什么被折叠?



